bestandsgrootte van eenvoudige database

Status
Niet open voor verdere reacties.

Plotinus

Gebruiker
Lid geworden
25 mrt 2007
Berichten
658
Ik heb een eenvoudige database (Office 2013) met enkele tabellen een formulier een rapport en enkele querys. In het formulier heb ik een logo/afbeelding zitten dat nogal groot was (9MB), wat volgens mij de reden was van de ca, 14 MB van de database. Ik heb vervolgens het plaatje geschaald en opnieuw in het formulier gehangen -> kleine toename bestandsomvang. Heel vreemd dacht ik; toch eens kijken wat er gebeurt met de afbeelding terugplaatsen met de oorspronkelijke bestandsomvang afbeelding -> enorme toename bestandomvang database. Hoe kan dit; ik verwijder toch echt de oorspronkelijke afbeelding?
Ik heb zojuist de database naar mijn werkcomputer gestuurd in de hoop dat Office 2007 misschien iets slims doet. Helaas niet dus. Wel zie ik dat het logo verdwenen is. Ik heb dus blijkbaar een link gelegd zonder de afbeelding te importeren(?) Uiteraard wil ik de afbeelding importeren/verankeren. Iemand een idee hoe dit moet
 
Het groeien van je db lijkt ogenschijnlijk onlogisch als je een (veel te groot) plaatje verwijderd en vervangt door een kleinere afbeelding, maar dan snap je nog niet helemaal hoe databases werken. Maar die omissie is snel te verhelpen :). Een database is namelijk niet alleen datgene wat je ziet maar ook wat er ooit ingezeten heeft. De meeste databases (en Access dus ook) houden namelijk de wijzigingen bij die je doet in een database, de zogenaamde Transaction Log. En jouw 'transactions' waren dus
1. Plaatje van 9 mb toevoegen (db groeit)
2. Plaatje verwijderen (db blijft even groot, maar plaatje staat nu in de Transaction)
3. Nieuw plaatje erbij (db groeit uiteraard weer)
4. Nieuwe Plaatje verwijderen (db blijft even groot, maar plaatje staat nu in de Transaction)
5. Originele plaatje van 9 mb toevoegen (db groeit weer driftig door)
En dat kun je dus lang volhouden...

De meeste mensen doen niks met de Transaction log, maar je kunt daarmee bijvoorbeeld met Rollback gewiste records terughalen. 't Is maar dat je het weet :).
Dat is ook de reden dat we regelmatig tegen mensen zeggen dat ze de db moeten Comprimeren en Herstellen, want dat is de enige manier om de Transaction log leeg te maken. En daarmee verdwijnt je grote plaatje dus wél. Maar ik ben toch een beetje bezorgd, als ik deze regel lees:
Uiteraard wil ik de afbeelding importeren/verankeren. Iemand een idee hoe dit moet
Dat mag niet een 'uiteraard' etc handeling zijn, want ik zou zelfs zeggen:
Uiteraard wil ik de afbeelding niet opslaan in de database, want ik wil voorkomen dat de database nodeloos groot wordt met al die plaatjes.
Dat had je uitgangspunt (en eventuele vraag) dus moeten zijn...
 
Oké, dat is dus het probleem, de plaatjes blijven staan. Ik had dat ondertussen ook al min of meer ontdekt, omdat er ook nog een optie is om de plaatjes naast elkaar te zetten en dat zie ik dan ook gebeuren. Maar hoe haal ik deze vuilnis er uit; bij het eigenschappen scherm lukt dit niet? Uiteraard heb ik met comprimeren en herstellen het geprobeerd, maar nog geen enkel effect gezien.
Het zijn vast wat beginnersschoonheidsfoutjes...
 
Sowieso moet je dus geen bijlagevelden gebruiken, dat is dodelijk voor de grootte van je db. Verder heb je de plaatjes waaschijnlijk ingesloten en niet gekoppeld. Het beste kun je plaatjes bewaren in een submap van de map waar de db ook staat. Dan kun je heel simpel met CurrentProject.Path dat pad uitbreiden. bijvoorbeeld met pad = CurrentProject.Path & "\Afbeeldingen".
 
Hoe ik afbeeldingen in de database moet opnemen is me nu (globaal)wel duidelijk; hoe te realiseren is nog iets anders, maar dat komt...
Wat bizar blijft is dat de bestandsomvang blijft groeien bij importeren en verwijderen van afbeeldingen/logo in de kop van mijn formulier. Ik heb nu alle objecten uit mijn database gegooid, dus geen tabellen, formulieren, rapporten etc. meer (navigatiescherm helemaal leeg) en ik blijf ca. 32 Mb bestandsomvang houden (ook na comprimeren en herstellen). In een eerdere versie die ik zojuist heb teruggevonden zonder gegoochel met logo is de bestandsomvang ca. 2 Mb. Ik ga hier maar mee verder, en maak mijn formulier maar opnieuw, met direct het goede logo.
 
Zet 'm anders even op een fileshare als wikisend.com, eventueel gezipt als hij nog te groot is. Het kijkt voor ons een stuk makkelijker als we de db kunnen bekijken.
 
Een map in mijn Dropbox gedeeld; als het goed is heb je daarvan een e-mail ontvangen.
 
Is binnen; ik zal er vanavond naar kijken.
 
Het probleem is inmiddels opgelost. Ik had ineens een lumineus idee: een lege database openen en daar alles in importeren -> nog geen 1 MB. Daarmee is het probleem wel opgelost, maar begrijp ik nog niet wat er mis gaat en dat blijft knagen. Nu ga ik uitzoeken hoe ik de afbeeldingen in een aparte map kan steken en daar een link naar kan uitrollen, zodat de database zelf zo klein en daarmee zo soepel mogelijk blijft. Eens kijken of het me lukt wat OctaFish eerder hierover heeft geschreven.
 
Da's inderdaad de 'oplossing' die ik zelf ook had bedacht. En dan geen ingesloten objecten/afbeeldingen gebruiken, maar gekoppelde. En tekstvelden gebruiken voor de paden naar de verschillende afbeeldingen. Ik heb in jouw db die instellingen ook wel aangepast, maar ik krijg de db zelf toch ook niet kleiner. Ergens weigert Access die data er uit te mieteren. Maar de simpelste workaround is dan meestal toch een nieuwe db maken en de tabellen opnieuw importeren.
 
Ik wil als novice in Access niet betweterig overkomen, maar als ik een grote afbeelding koppel of insluit geeft dit exact dezelfde bestandsomvang van de database.... Al leek het zo mooi, voor mij is dit dus niet bruikbaar - helaas. Van een formulier kan ik een afbeelding overigens wel netjes verwijderen met reductie van de bestandsomvang tot de oorspronkelijke bestandsomvang.
 
Afbeeldingen moet je nooit in een db zetten. Je gebruikt een tekstlink naar de afbeeldingen en als je de afbeelding wilt zien in een rapport/formulier dan laad je de afbeelding 'live' op formulier of rapport. Dat is de enige manier om de grootte van de db klein te houden. En dat werkt ook alleen goed met een gekoppeld object, niet met een ingesloten object. De truc is dus om eerst een afbeelding neer te zetten met een koppeling, en daarna de afbeelding te verwijderen.
 
De gedachtegang kan ik perfect volgen, maar hoe het te realiseren nog niet. Heb je niet een link naar jouw cursusonderdeel waar dit stap voor stap wordt uitgelegd? Mijn situatie is (o.a.) dat ik op hetzelfde niveau als de database een map heb gemaakt met pasfoto's. Daarin moet dus voor iedere kunstenaar één pasfoto komen die op het betreffende formulier wordt getoond. Ik heb het veld gedefinieerd als bijlage. Ik kan nu dus wel een bijlage binnenhalen, maar dan komt ie in de database, en dat willen we dus niet.
Ik heb ergens het volgende gevonden: Expressie: =[Pad] & "\" Afbeelding. Maar waar plaats ik dat?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan