Veldlengte aanpassen na tabelmaakquery gebaseerd op samenvoegquery

Status
Niet open voor verdere reacties.

Diermeister

Gebruiker
Lid geworden
22 nov 2009
Berichten
8
Hoi,
Na vele antwoorden op vragen binnen het forum te hebben gevonden loop ik nu stuk. Ik ben mijn antwoord helaas ook nergens anders tegen gekomen op internet dus misschien wil ik teveel... Ik zal de context van mijn vraag een beetje duidelijk proberen te maken.

De situatie is als volgt. Ik heb een tbl met gegevens van de KvK. Hierin zitten twee adresgroepen die ik gebruik om de gebruikers van mijn database adressen van 'een bronleverancier' mee te laten vergelijken. De gegevens van KvK worden om de zoveel tijd geupdate met mutatiebestanden. Deze tbl heeft nette veldlengtes (niet te groot, niet te klein).

Voor de adresgroepen heb ik twee selectiequery's gemaakt (gebaseerd op dezelfde tabel) met de noodzakelijke gegevens die ik door een samenvoegquery stuur. Vervolgens laat ik de tabelmaakquery een nieuwe tabel aanmaken waarin de twee adresgroepen apart (dwz met ieder een eigen categorienaam) worden weergegeven. Ik laat tot slot op de nieuwe tabel een index en een primaire sleutel aanmaken via een aparte definitiequery (in SQL). Om de vergelijking met 'een bronleverancier' te maken met up-to-date gegevens run ik de queryserie na ieder ontvangen mutatiebestand. Ik heb dit onder een knop gezet en het geheel werkt perfect... echter...

De veldlengtes in de de nieuwe tabel staan allen op tekst (niets mis mee) met een veldlengte van 255. Ik ben niet heel gelukkig met die 255 want dat maakt de database onnodig groot (ik heb redelijk wat KvK-gegevens namelijk).

Dan eindelijk mijn vraag:
Weet iemand of ik de veldlengtes van mijn records kan predefinieren? Ik wil dit niet doen door in de tabel de gegevens handmatig aan te passen... Mijn voorkeur gaat uit naar een definitiequery (zeker als ik het toe zou kunnen voegen aan de al bestaande uiteraard) maar op dit moment is iedere optie welkom :thumb: Iemand een suggestie?

Gr
Herman
 
Ok dus het wordt in een defintiequery:

ALTER TABLE tbl_KvK_All
ALTER COLUMN Categorie TEXT(10)

Maar als ik hem wil uitvoeren (voor de test even op één veld tegelijk) dan krijg ik een foutmelding. Ik moet mijn MaxLocksPerFile aanpassen. Onverstandig als ik ben doe ik dat dan maar conform de instructies van:
http://support.microsoft.com/kb/815281/nl
maar ik kom er toch nog niet uit. Dwz hij wil het daarna nog niet doen. Heeft dit te maken met beschikbaar geheugen ivm met de grootte van de tbl?
 
Oke... Dus of ik moet een module aanmaken om het geheugen tijdelijk te vergroten of definitief (wat ik niet van plan ben te doen binnen het werkstation op mijn werk) maar als ik het thuis probeer door:

Klik in het venster Microsoft Visual Basic -<naam database>-[<naam module> (Code)] op Venster Direct in het menu Beeld.
Typ de volgende code in het venster Direct.
DAO.DBEngine.SetOption dbmaxlocksperfile,15000
Bron: http://support.microsoft.com/kb/815281/nl

Dan kom ik er nog niet (zelfde foutmelding, ook als ik die 15.000 vergroot tot 200.000).

Maw het leed is al geschied nadat ik de tabelmaakquery heb uitgevoerd. Ipv de veldlengtes aan te passen in een definitiequery, zal ik het dus mogelijkerwijs in de tabelmaakquery zelf al moeten aangeven welke veldlengtes ik verlang.

Zou dat kunne kenne? Wie weet wat?
 
De veldlengtes in de de nieuwe tabel staan allen op tekst (niets mis mee) met een veldlengte van 255. Ik ben niet heel gelukkig met die 255 want dat maakt de database onnodig groot (ik heb redelijk wat KvK-gegevens namelijk).
Dit is niet helemaal waar: ongeacht de waarde die je aangeeft in de veldeigenschap <Veldlengte> worden alleen die tekens opgeslagen die je invoert. Een tabel met 25 velden met veldlengte 255 is dus even groot als een tabel met veldlengte 5, als je in de velden maar 5 tekens invoert.
Een reden om de veldlengte aan te passen zou kunnen zijn om te voorkomen dat een gebruiker teveel karakters invoert, bijvoorbeeld bij een veld als Tussenvoegsels of Voorletters. Ook heeft de ingestelde veldlengte invloed op formulieren die je maakt op basis van de tabel.
Er is echter (voor zover ik weet) geen enkele invloed op de uiteindelijke grootte van de database.
 
Ik ben er even uit geweest. Ten eerste vanwege de desillusie die het mij opleverde omdat ik niet tot het gewenste resultaat kwam en ten tweede vanwege andere prio's... Heb het echter nog niet opgeven. Met oranjekoorts in het verschiet heeft zich optimisme meester van me gemaakt die me dwingt het nog eens te proberen :cool:

Wat je zegt over de veldlengte klopt (heb ik mij door slimmere heren dan mijzelf laten vertellen) maar het probleem met de uitdijende omvang van mij db ligt aan het feit dat ik een tweetal indexen op de tabel heb staan. Ik zie ook een significante wijziging in grootte op het moment dat ik de veldlengtes (geforceerd handmatig) aanpas.

De definitiequery met aangepaste veldlengtes (ALTER TABLE/ALTER COLUMN) levert voor mij het gewenste resultaat maar werkt in de praktijk niet vanwege het MaxLocksPerFile-verhaal. Kan ik de veldlengtes niet definieren in de tabelmaakquery zelf als ik de gegevens via de samenvoegquery heb opgepikt? Dan hoef ik niets aan te passen in de tabel (wat hij dus weigert) maar kan ik direct de juist veldlengte opgeven.

Andere opties: zou ik in de samenvoegquery al veldlengtes van door te geven gegevens kunnen definieren? Of kan ik in VBA misschien iets forceren zonder weer op het MaxLocksPerFile-verhaal te stuiten?
 
Ik ga het over een andere boeg gooien. Over het meegeven van de veldlengte binnen een ander type query dan een definitiequery vind ik niets terug op internet. Ik ga er maar vanuit dat dat niet mogelijk is (in ieder geval niet zonder aan het MaxLocksPerFile te klooien).

Ik vind wel info terug om in VBA een nieuwe kolom toe te voegen met een opgegeven veldlengte, de records hierin te kopieeren van een bestaande kolom en vervolgens de oude kolom te verwijderen en de nieuwe de naam van de oude mee te geven. Iemand daar enige ervaring mee?
 
Over het meegeven van de veldlengte binnen een ander type query dan een definitiequery vind ik niets terug op internet.

Dat kan wel kloppen want dit kan per definitie niet, niet binnen MS Access en niet binnen professionele databases.
Maar waarom definieer je niet gewoon je tabel met de door jouw gewenste veldlengte (NIet door een tabelmaalquery dus).
Daarna simpelweg een kwestie van de tabel vullen met gegevens.
Je maakt het moeilijker dan nodig.

Tardis
 
Wel dat laatste geldt helaas voor meer toepassingen binnen mijn db. Linksom of rechtsom ik ga uiteindelijk voor de werkende functionaliteit...
Kan ik de tabel ook vullen als ik hem met de data van een op drie query's gebaseerde samenvoegquery baseer?
Wat je voorstelt is dan:
1. Stamtabel aanmaken met de gewenste veldlengtes.

Dan een procedure die ik aanroep na het aanvullen van bronbestanden met:
2. Tabel leegmaken.
3. Vullen met gegevens uit de samenvoegquery.
Eventueel indexen droppen/opnemen in die procedure en daarna heel hard comprimeren.
Dat ziet er wel een stuk eenvoudiger uit... Schoonheid in eenvoud. Ik had er niet eens bij stil gestaan omdat een samenvoegquery mij zo anders leek.
Ik ga een mooie poging wagen. Thx! :thumb:
 
Werkt prachtig :d Thx voor de hint!
Zat al vanaf het begin aan die tabelmaakquery vast. Beetje tunnelvisie denk ik.
Db is meteen een stuk kleiner :cool:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan