Gegevens ophalen uit andere DB

Status
Niet open voor verdere reacties.

fmeca

Gebruiker
Lid geworden
7 sep 2009
Berichten
95
Hoi mede Accessers,

Ik het volgende probleem:
Ik heb een 'lege' access database, deze bevat alleen de Query's, formuliere, rapporten ect. (lees programma)
De benodigde data (alle tabellen) wil ik uit een andere DB ophalen / koppelen m.b.v. Button (= openen 'explorer' voor de locatie en keuze van de gevraagde db).
De laatst geopende gegevens DB moet hij vervolgens onthouden. Zodat hij deze automatisch opent bij een volgende start.

Wie heeft een voorbeeldje voor VBA of code?

Via 'externe gegevens ophalen'en 'tabellen koppelen' werkt het perfect.
Maar nu in VBA, da's andere koek.

Mucho's Gracias
Eric
 
Ik heb thuis wel een voorbeeldje, maar daar kan ik nu dus niet bij.
De techniek is relatief simpel: je gebruikt een aparte tabel waarin je het pad opslaat. Vervolgens koppel je een formulier met een keuzelijst aan die tabel, waarin je kunt bladeren naar de Backend database, en sla je het pad op in de tabel.
De Padverwijzing blijft dus staan totdat je die verandert met het formulier. Zo iets?
 
Ik heb thuis wel een voorbeeldje, maar daar kan ik nu dus niet bij.
De techniek is relatief simpel: je gebruikt een aparte tabel waarin je het pad opslaat. Vervolgens koppel je een formulier met een keuzelijst aan die tabel, waarin je kunt bladeren naar de Backend database, en sla je het pad op in de tabel.
De Padverwijzing blijft dus staan totdat je die verandert met het formulier. Zo iets?

Jouw oplossing lost alleen het probleem op van de laatst geopende database. Dat is duidelijk. bedankt hiervoor.
Het grootste probleem is het kiezen van de juiste gegevensdatabase.

Op dit moment heb ik verschillende databases die allen het zelfde 'programma'deel hebben,(rapporten, formulieren query e.d.) en vergelijkbare gegevens (dataopbouw). De gegevens in deze databases is per database verschillend. Als ik nu iets wijzig in het 'programma'deel moet ik deze wijziging in alle databases ('programma'deel) doorvoeren. Dit is veel werk en de kans op fouten is groot.
Nu wil ik de database splitsen in 1 database met het 'programma'deel bevat en meerdere verschillende databases met de gegevensdata. Ik wil de keuze van gegevensdatabase graag in VBA doen zoals met 'Externegegevens ophalen + Tabellen koppellen' , zodat de het achterliggende programma niet toegankelijk is / hoeft te zijn voor de gebruikers.
Ikzelf dacht aan een 'button' waarmee ik de functie avn 'externe gegevens ophalen' en vervolgens de 'tabellen koppelen'.
Echter hoe doe ik dit?
 
Laatst bewerkt:
Op zich is het een goed idee om de db te splitsen in een Frontend en een Backend, waarbij je alle formulieren en rapporten etc. in het Frontend deel hebt en alle tabellen in de backend.

Als je verschillende Backend db's hebt, wordt het natuurlijk een stuk lastiger, omdat je niet centraal de hele db kunt bijwerken. Je moet dus elke tabel apart benoemen bij het bijwerken. Bijvoorbeeld zo iets:

Code:
DoCmd.RunSQL "DROP TABLE Artikelen"
DoCmd.TransferDatabase acLink, "Microsoft Access", Pad1, acTable, "Artikelen", "Artikelen"
DoCmd.RunSQL "DROP TABLE Artikelgroepen"
DoCmd.TransferDatabase acLink, "Microsoft Access", Pad1, acTable, "Artikelgroepen", "Artikelgroepen"
DoCmd.RunSQL "DROP TABLE Bestellingen"
DoCmd.TransferDatabase acLink, "Microsoft Access", Pad2, acTable, "Bestellingen", "Bestellingen"
DoCmd.RunSQL "DROP TABLE Klanten"
DoCmd.TransferDatabase acLink, "Microsoft Access", Pad2, acTable, "Klanten", "Klanten"
DoCmd.RunSQL "DROP TABLE Rekeningen"
DoCmd.TransferDatabase acLink, "Microsoft Access", Pad3, acTable, "Rekeningen", "Rekeningen"
Eventueel vanuit een formulier aan te sturen, waarbij je elk pad met een dialoogvenster kunt vullen.
 
Michel bedankt,

Ik ga met jouw tips aan de slag.
Ik laat de definitieve oplossing wel weten.

Eric
 
Mijn oplossing:

Met hulp van een ander topic het forum.

Omdat alle BE_DB's qua opbouw gelijk zijn heb ik de namen van deze tabellen in een apperte tabel geplaatst.(hoort bij FE_DB)
In een andere tabel bewaar ik de laatst geopende Databases. Makkelijk als je ze nog een keer nodig hebt (DB_Locatie).
Vervolgens heb ik een 'Do Until 'tabeleinde' gemaakt die achtereenvolgens alle aanwezige tabellen verwijderd en de nieuwe tabellen van een andere BE_DB koppelt.

Code:
Private Sub Knop_DB_Laden_Click()
On Error GoTo Err_Knop_DB_Laden_Click

    Dim Source_DB As String
    Dim rs As DAO.Recordset
    Dim db As DAO.Database

    Set db = CurrentDb
    Set rs = db.OpenRecordset("a_Tabellenlijst")
    
    Source_DB = [DB_Locatie]
    
    Do Until rs.EOF
        DoCmd.DeleteObject acTable, rs!Tabelnaam
        DoCmd.TransferDatabase acLink, "Microsoft Access", Source_DB, acTable, rs!Tabelnaam, rs!Tabelnaam
        rs.MoveNext
    Loop

'****************
    Dim Active_DB As String
 
    Active_DB = DLast("ent_Systeem", "Entiteit")

THX aan iedereeen die een stukje van hun code hierin herkennen.

Vervolgens heb ik hetvolgende vraagje:
Ik wil natuurlijk weten welke database momenteel geopend is.
Het 2e stukje code.
Ik kijk naar de laatste omschrijving van het systeem, deze wil ik in het keuzeformulier zichtbaar maken maar ik krijg dit niet voor elkaar.
De code werkt als ik hem in een tabel schrijf maar dat is niet de bedoeling.

TIPS? :o

Eric
 
Ik zie geen code waarmee je de laatste omschrijving wegzet op het formulier. ik neem aan, dat het gaat om deze code?

Active_DB = DLast("ent_Systeem", "Entiteit")

Is dat dan niet: Me.txtLaatsteOmschrijving=Active_DB
 
Ik zie geen code waarmee je de laatste omschrijving wegzet op het formulier. ik neem aan, dat het gaat om deze code?

Active_DB = DLast("ent_Systeem", "Entiteit")

Is dat dan niet: Me.txtLaatsteOmschrijving=Active_DB

Thx Michel dat was 'm. Het is gelukt.
Ik wist dacht dat het 'Me. Active_DB' rechtstreeks ging, maar dat lukt niet vandaar mijn vraag.
 
Graag gedaan! Mag je de vraag nog op opgelost zetten...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan