[access] tabellen samenvoegen

Pagina: 1
Acties:
  • 171 views sinds 30-01-2008
  • Reageer

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Situatie: twee mensen werken met dezelfde database. In iedere tabel staat bij ieder record wie de gegevens heeft ingevoerd en iedere unieke ID is zo opgebouwd dat er nooit dubbele ID's ontstaan.

Het punt is: hoe voeg ik deze nu naderhand samen? Zelf dacht ik aan zoiets:

1. gebruik 1 exporteert zijn gegevens
2. gebruik 2 importeert deze gegevens waarbij:

- de tabellen van gebruiker 1 onder tijdelijke namen worden geimporteerd (docmd.transferdatabase)
- vervolgens in de database van gebruiker 2 de volgende query wordt uitgevoerd per tabel:
INSERT INTO nieuwe tabel SELECT * FROM tabel gebruik 1 UNION ALL SELECT * FROM tijdelijke naam tabel gebruiker 2
- vervolgens de tabel met importgegevens en de oorspronkelijke tabel verwijderen en deze nieuwe tabel hernoemen

3. dit proces herhalen voor alle tabellen

Overigens heb ik de query niet op juistheid getest.

Mijn punt is echter... kan dit niet eenvoudiger?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

Je hoeft toch alleen maar de tweede tabel naar de eerste te importeren? Daar heb je die union toch niet bij nodig? Uiteraard moet je dan wel eerst een backup maken. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
NMe84 schreef op 07 november 2004 @ 20:18:
Je hoeft toch alleen maar de tweede tabel naar de eerste te importeren? Daar heb je die union toch niet bij nodig? Uiteraard moet je dan wel eerst een backup maken. :P
Als ik een tabel rechtstreek wil importeren gaat het mis. Althans, zoals ik het al eens in gedachten had:

code:
1
SELECT * INTO tabel_behouden FROM tabel_tijdelijk


Dan wil Access namelijk de bestaande tabel verwijderen.... :(

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Ok, ondertussen ben ik alweer een stapje verder met deze code:

code:
1
2
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO Tabel2 SELECT * FROM Tabel1 WHERE door = 1"


Ik pruts even verder met de praktische code van het importeren nu, bij nieuwe problemen meld ik me wel weer.

Bedankt zover.

[ Voor 51% gewijzigd door TromboneFreakus op 07-11-2004 21:10 ]


  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Soms kan het snel gaan.... :)

In abstracto ben ik er uit. Uiteraard moet ik nog heel wat code er omheen schrijven en mooie dialogen e.d. maken, maar dat is voor hier verder niet zo van belang. Aangezien ik denk dat forum alleen kan bestaan bij geven en nemen, geef ik even vrij wat ik nu heb gevonden en werkt.

Dit voorbeeld gaat er van uit dat in iedere tabel er een veld is met de naam 'door' met als waarde een unieke identificatie van de gebruiker (een van de vele mogelijke gebruikers). Tip: maak een tabel aan met gebruikers, laat de gebruiker bij het werken vooraf zijn naam kiezen en val continu terug op deze tabel in het verdere werken.

De gegevens kunnen vervolgens als volgt snel geexporteerd worden:

code:
1
2
3
4
5
6
DoCmd.SetWarnings False
Dim dbExport As DAO.Database
Set dbExport = CreateDatabase("Backup.mdb", dbLangDutch)
dbExport.Close

DoCmd.RunSQL "SELECT Tabel2.* INTO Tabel2 IN 'Backup.mdb' FROM Tabel2 WHERE door = 2"


Tabel2 is in dit voorbeeld de tabel die wordt geexporteerd naar het bestand 'Backup.mdb', met dien verstande dat alleeen velden gemaakt door persoon met nummer 2 worden overgenomen.

Vervolgens kun je dit weer laten importeren - zonder verlies van bestaande gegevens - met deze code:

code:
1
2
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO Tabel2 SELECT * FROM Tabel2 IN 'Backup.mdb'"


Eventueel pas je ook hier de WHERE clausule toe. VOoropgesteld echter dat een gebruiker toch alleen maar importeert wat hij zelf NIET aan data heeft, voegt zo'n clausule niets toe.

De database met exportgegevens laat je met deze code plaatsen in dezelfde map als de database waarmee gewerkt wordt en krijgt tevens een unieke naam:

code:
1
2
filename_nopath = (Date & " - " & Int(100000 * Rnd)) & ".mdb"
filename = CurrentProject.Path & "\" & filename_nopath

[ Voor 12% gewijzigd door TromboneFreakus op 07-11-2004 21:23 ]