23. oktober 2003 - 12:49Der er
29 kommentarer og 1 løsning
Kopiere tabeller over i ekstern DB
Hej Eksperter Har en opdatering DB der indeholder 20 tabeller. Dem vil jeg gerne haver overført til min eksterne DB, men kun hvis de ikke eksistere i forvejen. 1. undersøger om tabellen eksisterer, hvis ja kopiere, hvis nej undersøgelse af næste tabel
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Du kan vel bruge noget i retning af (ikke testet kode):
dim tdf as tabledef dim tdf2 as tabledef dim db1 as database dim db2 as database dim CopyTable as Boolean
set db1 = din opdateringsdatabase set db1 = din eksterne db
For Each tdf in db1 tablecopy = true for each tdf2 in db2 if tdf.Name = tdf2.Name then tablecopy = false end if Next tdf2 if tablecopy then DoCmd.TransferDatabase accopy, "Microsoft Access", db2.Name, acTable, _ tdf.Name, tdf2.Name
Hvis den ikke kan opdateres andre steder fra, så er det vel blot at sætte en switz når man opdaterer den eksterne base, og slukke switsen når man opdaterer den interne base.
Dim tdf As TableDef Dim tdf2 As TableDef Dim db1 As Database Dim db2 As Database Dim CopyTable As Boolean
Set db1 = "c:\update.mdb" 'update db Set db2 = "c:\testDB.mdb" 'ekstern db
For Each tdf In db1 tablecopy = True For Each tdf2 In db2 If tdf.name = tdf2.name Then tablecopy = False End If Next tdf2 If tablecopy Then DoCmd.TransferDatabase acCopy, "Microsoft Access", "c:\update.mdb", acTable, tdf.name, "c:\update.mdb" End Sub
'overchord' får fejl på Set db1 = "c:\update.mdb" 'update db
når denne kode kører!
Dim tdf As TableDef Dim tdf2 As TableDef Dim db1 As Database Dim db2 As Database Dim CopyTable As Boolean
Set db1 = "c:\update.mdb" 'update db Set db2 = "c:\testDB.mdb" 'ekstern db
For Each tdf In db1 tablecopy = True For Each tdf2 In db2 If tdf.name = tdf2.name Then tablecopy = False End If Next tdf2 If tablecopy Then DoCmd.TransferDatabase acCopy, "Microsoft Access", tdf.name, acTable, tdf2.name, db2.name
Jeg følger jo lidt med på sidelinien, så jeg måske også kan blive lidt klogere. Uden at være verdensmester i VBA, mener jeg at kunne læse, at I løber hele basen i gennem (alle 20 tabeller til sin tid) for at tjekke om hver enkelt record er opdateret. Hvis den eksterne base er forskellig fra den interne, så opdaterer I, ellers gør I ikke noget.
'overchord' Koden kører men får type: mismatch error
Private Sub Command45_Click() Dim tdf As TableDef Dim tdf2 As TableDef Dim db1 As Database Dim db2 As Database Dim CopyTable As Boolean
Set db1 = CurrentDb Set db2 = "c:\testDB.mdb" 'ekstern db
For Each tdf In db1 tablecopy = True For Each tdf2 In db2 If tdf.name = tdf2.name Then tablecopy = False End If Next tdf2 If tablecopy Then DoCmd.TransferDatabase acCopy, "Microsoft Access", tdf.name, acTable, tdf2.name, db2.name End If Next tdf End Sub
Har 18 identiske backends som indeholder forskelligt data. Når jeg kører en opdatering skulle dataene var intakte, men felter og tabeller same. Kan det lade sig gøre?
Ok hvad siger mismatch-fejlen, er det stadig docmd.trasnferdatabase der giver problemer??
mht at opdaetere felt-vis. Er de vigtigt at tabellerne i DB1 som evt ogsaa forefindes i db2 forbliver i databasen? Hvad jeg egentligt proever at sige er om det vil vaere nemmere at smide alle tabellerne fra DB1 over i DB2
Da din eksterne base kun bliver opdateret herfra, så vil jeg hver gang jeg opdaterer min interne base, sætte en markering.
Så vil jeg kun overføre data til den eksterne base, når denne markering er sat, og jeg vil umiddelbart efter overførslen slette markeringen. Du har jo én master og én slave. Så lad masteren styre slaven. Hvis du havde flere, som kunne opdatere slaven, så havde det været relevant at tjekke for om indholdet var tjekket.
DoCmd.TransferDatabase acCopy, "Microsoft Access", db2.Name, acTable, tdf.Name, tdf.Name Grunden til 2 x tdf name er jo at tabel-navnet IKKE eksisterer i db2, og derfor kan tdf2.name ikke bruge, dooh , min fejl - beklager
"Hvad jeg egentligt proever at sige er om det vil vaere nemmere at smide alle tabellerne fra DB1 over i DB2"
Det er jeg meget enig i. Hvis I alligevel vil tjekke hele databasen, så er det da lettere at smide hele lortet over. Fra Master til slave. Men jeg mener stadig, at I skal styre det fra Masteren.
Som tidligere skrevet er der 18 backends, med samme struktur, men forskellig data. Jeg sidder med master backend, som jeg ændrer løbende. Hvordan får jeg nemmest opdatert de andre backends. Jeg laver løbende nye tabeller og felter i master backend's tabeller. ? Mine 18 backends sejler rundt i hele verdenen! så opdateringen sendes på CD-rom JAN
ok proev med flg. Du skal aendre tdf og tdf2 til string istedet :
For Each tabledef In db1.tabledefs tablecopy = True tdf = db1.tabledef.name For Each tabeldef In db2.tabledefs tdf2 = db2.tabledef.Name If tdf = tdf2 Then tablecopy = False End If Next tabledef
er ikke helt 100 paa om det virker, men proever ta lave et eksempel
ok nu har jeg en kode der virker helt 100% sikkert!
Sub updatetables()
Dim db1 As Database Dim db2 As Database Dim tdf As TableDef Dim tdf2 As TableDef Dim TableCopy As Boolean
Set db1 = CurrentDb Set db2 = OpenDatabase("c:\a.mdb")
With db1 For Each tdf In .TableDefs TableCopy = True With db2 For Each tdf2 In .TableDefs If tdf.Name = tdf2.Name Then TableCopy = False End If Next tdf2 End With
If TableCopy Then DoCmd.TransferDatabase acExport, "Microsoft Access", db2.Name, acTable, tdf.Name, tdf.Name, 0 End If
Next End With
End Sub
- Jeg kan sende dig eksemplerne hvis du laegger en mail-adresse (acc97)
Det var saa lidt - har sendt en kopi som benytter sig af koden i: 24/10-2003 17:10:13
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.