Kolommen toevoegen aan een bestaande tabel

Status
Niet open voor verdere reacties.

annetiti

Gebruiker
Lid geworden
6 aug 2007
Berichten
195
Hallo

Via VBA zou ik aan een bestaande tabel kolommen (velden toevoegen).

TabelA bestaat uit volgende velden: Nr, Startjaar, controle, eindjaar.
vb record1: N100;2010;3;2020
vb record2: N101;2011;2;2020
Via een msgbox of formulier wordt het beginjaar en eindjaar ingevoerd
de tabel moet aangepast worden zodat je per controle jaar een x kan plaatsen in overeenstemmend jaar waarin een controle moet gebeuren

MSGBOX("geef beginjaar") vb 2010
MSGBOX ("geef eindjaar") vb 2020 Graag had ik een record met volgende inhoud:
nr startjaar controle eindjaar j2010 j2011 j2012 j2013 .j2014 j2015 j2016.. tot j2020...
N100 2010 3 2020 X X x
N101 2011 2 2020 x x x
er wordt een "X" geplaats in het corresponderend jaartal afhankelijk van de inhoud controle

Deze tabel wordt daarna geexporteerd naar excel.
Kan iemand mij helpen bij het toevoegen van velden?
Hartelijk dank
Annetiti
 
Dat doe je in VBA met het ALTER TABLE statement.

Code:
On Error Resume Next
DoCmd.Echo False, "Toevoegen van de velden voor gesplitste gegevens..."
strSQL = "ALTER TABLE [Tabel]  ADD COLUMN SR_STRAAT TEXT(255)"
db.Execute (strSQL)
strSQL = "ALTER TABLE  [Tabel]   ADD COLUMN SR_HUISNR INT"
db.Execute (strSQL)
strSQL = "ALTER TABLE  [Tabel]   ADD COLUMN SR_HUISNR_TOEV TEXT(50)"
db.Execute (strSQL)
strSQL = "ALTER TABLE  [Tabel]   ADD COLUMN CHECKEN TEXT(255)"
db.Execute (strSQL)
On Error GoTo 0

Ik heb in het voorbeeld de velden apart toegevoegd, maar je kunt er ook één statement van maken.
Het nadeel daarvan is, dat als één veld al in de tabel staat, de query niet wordt uitgevoerd. Door de velden apart toe te voegen, en een On Error ervoor te zetten, worden de velden altijd toegevoegd.

Michel
 
kolommen toevoegen

Hartelijk dank

Ik probeer deze uit en laat iets weten

groeten
Annetiti
 
Je zou er een loopje van kunnen maken, als je met een Inputbox (geen Msgbox ;) ) werkt.
Met een Loopje voeg je dan alle jaargangen toe.
Ziet er zo uit:

Code:
sBegin = InputBox("Geef het beginjaar", "Beginjaar", 2010)
sEind = InputBox("Geef het eindjaar", "Eindjaar", 2020)

On Error Resume Next
For iJaar = sBegin To sEind
    strSQL = "ALTER TABLE [Tabel]  ADD COLUMN " & iJaar & " TEXT(10)"
    DoCmd.Echo False, "Toevoegen van de velden voor gesplitste gegevens..."
    db.Execute (strSQL)
Next iJaar

Michel
 
kolommen toevoegen

Hallo

Ik heb het in een formulier geplaatst maar het werkt niet.
Bij het debuggen van de VBA gebeurt alles goed maar wanneer ik naar de tabel kijk zijn de velden niet toegevoegd.

Zou de VBA code ook werken met access 2007?

In bijlage een klein voorbeeldje

Zou je er even kunnen naar kijken? Hartelijk dank
Annetiti
 

Bijlagen

De code zou in 2007 ook moeten werken. Ik zal er eens naar kijken...

Michel
 
De code werkte niet goed, omdat je de ADO bibliotheek niet hebt geladen. Bij mij staat die eigenlijk altijd wel aan, dus om de code werkend te krijgen moet je in het VBA scherm naar <Extra>, <Verwijzingen> en dan naar beneden scrollen tot je <Microsoft ActiveX Data Objects 2.8> tegenkomt. Daar een vinkje plaatsen.

Deze variant werkt altijd, ook als je de bibilotheek niet laadt:

DoCmd.RunSQL strSQL

Is een stuk sneller aangepast..

Ik zou overigens aan het eind van de code nog het commando Docmd.Echo True toevoegen, om de statusregel weer te herstellen.

Michel
 
Laatst bewerkt:
kolommen

Hartelijk dank

Ik probeer dit deze avond uit en mail je zeker

groeten
Annetiti
 
Tja, het kan natuurlijk allemaal wel, maar qua normalisatie is het natuurlijk niet zo netjes om je data in zo'n brede tabel op te slaan. Je zou de data eigenlijk over twee tabellen moeten verdelen, waardoor je iets krijgt als
TabelA -> nr startjaar eindjaar (weet niet eens of je deze nodig hebt, maar zonder de achterliggende informatiebehoefte is dat moeilijk in te schatten..
TabelB -> nr jaar_controle

In tabel B staat dan bv
N100 2009
N100 2012
N100 2013

De jaren waarin geen controle plaatsvinden worden dan ook niet opgeslagen.
 
Kolommen

Hartelijk dank voor de uitleg
en ja...
het werkt heel goed.

Ben een enorme stap vooruit.

Annetiti:thumb:
 
De code werkte niet goed, omdat je de ADO bibliotheek niet hebt geladen. Bij mij staat die eigenlijk altijd wel aan, dus om de code werkend te krijgen moet je in het VBA scherm naar <Extra>, <Verwijzingen> en dan naar beneden scrollen tot je <Microsoft ActiveX Data Objects 2.8> tegenkomt. Daar een vinkje plaatsen.

Deze variant werkt altijd, ook als je de bibilotheek niet laadt:

DoCmd.RunSQL strSQL

Is een stuk sneller aangepast..

Ik zou overigens aan het eind van de code nog het commando Docmd.Echo True toevoegen, om de statusregel weer te herstellen.

Michel

Hartelijk dank.
Dit heeft me enorm vooruit geholpen :thumb:

groeten
Annetiti
 
EN hoe met een veld van type 'Hyperlink'

Dankje alvast voor deze oplossingen.

Maar toch nog een probleemje:
Hoe voeg ik een kolom toe van het type hyperlink of een Yes/No?

Thx
 
Laatst bewerkt:
Da's wel een heel oude vraag, die bovendien ook al is opgelost :)
Ik zou zeggen: maak een eigen vraag aan!
 
Deze topic is dusdanig gedateert dat deze met rust gelaten mag worden. Topic gaat op slot en wordt overgedragen aan de afdeling BNw(Betere Naslagwerken)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan