hallo,
für eine einfache synchonisation möchte ich die tabellen einer datenbank (ms-acc97) mit denen einer zweiten überschreiben.
wie stelle ich das am klügsten an?
sonnige grüsse
franz
hallo,
für eine einfache synchonisation möchte ich die tabellen einer datenbank (ms-acc97) mit denen einer zweiten überschreiben.
wie stelle ich das am klügsten an?
sonnige grüsse
franz
Hallo Franz,
die Frage ist, ob Du bei der Synchronisation alle Tabellen überschreiben willst, oder nur einige?
Wenn Du alle überschreiben willst, dann kannst Du ja gleich die komplette Datenbank rüberkopieren, bzw. per FTP übertragen lassen.
Gib uns noch genauere Infos.
Danke
Christian
hallo christian,
ich will nur einige tabellen (bzw. deren inhalt) überschreiben.
habe schonmal mit lösch- und anfügeabfragen rumprobiert, aber es muss doch auch einfacher gehen.
viele grüsse
franz
Hallo Franz,
hast Du es schon einmal mit Makros probiert? Okay ist vielleicht nicht die schönste Lösung, aber funktioniert einwandfrei und ist schnell gemacht. In der Quelldatenbank müsstest Du Dir nur so einen Makro basteln, die Kopieren Objekt Einträge kannst Du ja mit Copy & Paste schnell erstellen und dann nur noch die Namen der Tabellen ändern:
Warnmeldungen
Bei Access 2002 geht es, ich weiß aber nicht, ob alle Befehle auch im Access 97 vorhanden sind - musst Du prüfen
Gruß
Christian
hallo christian,
gute idee (hab keine makroberührungsängste ) doch es scheitert leider an den beziehungen dieser tabelle. bekomme die fehlermeldung „kann tabelle xxx nicht löschen. sie ist teil einer oder mehrerer beziehungen.“
also muss ich wohl doch auf datensatzebene arbeiten (z.b. mit einer lösch- und dann anfügeabfrage)
oder hast du noch einen eleganteren ansatz?
viele grüsse
franz
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
VBScript gefällig?
Hi Franz,
wenn die beiden Datenbanken lokal oder im LAN liegen, dann könntest Du auch folgendes VB-Script nehmen. Ich habe es getestet und es funktioniert.
Dim connDB, cmdSystem, sourceDB, targetDB, arrTables, tabName, fSystem, logFile, logFileName, msgInfo
REM Quelldatenbank mit Originaltabellen
sourceDB = "M:\Development\w-w-w\Original\franz.mdb"
REM Zieldatenbank
targetDB = "M:\Development\w-w-w\franz.mdb"
REM Laufwerk, Pfad und Dateiname Logbuch-Datei
logFileName = "C:\temp\synclog.txt"
REM hier kommt der Bericht rein
msgInfo = ""
REM hier stehen alle Tabellennamen die aus targetDB gelöscht und mit den Daten aus sourceDB gefüllt werden
arrTables = Array("Tab1", "Tab2", "Tab3", "Tab4")
Set connDB = CreateObject("ADODB.Connection")
connDB.Open = "provider=MICROSOFT.JET.OLEDB.4.0;data source=" & targetDB
Set cmdSystem = CreateObject("ADODB.Command")
On Error Resume Next
With cmdSystem
.ActiveConnection = connDB
.CommandTimeout = 5
For Each tabName In arrTables
msgInfo = msgInfo & tabName & ": löschen "
.CommandText = "DELETE \* FROM " & tabName
.Execute
If ( Err ) Then
msgInfo = msgInfo & "FEHLER"
Else
msgInfo = msgInfo & "OKAY"
End If
msgInfo = msgInfo & vbCrLf & tabName & ": sync. "
.CommandText = "INSERT INTO " & tabName & " SELECT \* FROM " & tabName & " IN '" & sourceDB & "';"
.Execute
If ( Err ) Then
msgInfo = msgInfo & "FEHLER"
Else
msgInfo = msgInfo & "OKAY"
End If
msgInfo = msgInfo & vbCrLf
Next
End With
On Error Goto 0
Set cmdSystem = Nothing
connDB.Close
Set connDB = Nothing
REM nächste Zeile ggf. löschen, falls mehr als 10 Tabellen bearbeitet werden
MsgBox msgInfo
REM Ausgabe Logbuch
Set fSystem = CreateObject("Scripting.FileSystemObject")
Set logFile = fSystem.OpenTextFile(logFileName, 8, True)
logFile.Write("Synchronisation ")
logFile.WriteLine(Now())
logFile.WriteLine(String(35, "="))
logFile.Write(msgInfo)
logFile.WriteLine(String(35, "\*"))
logFile.Write(vbCrLf)
logFile.Close
Set logFile=Nothing
Set fSystem=Nothing
Script ist getestet und funktioniert bei mir. Du musst es einfach kopieren (falls die Kopie nicht so toll ist, mail mir kurz, dann schicke ich es Dir gezippt als eMail). Es versteht sich von selber, dass in der sourceDB die Tabellen den gleichen Namen und die gleiche Struktur wie die Tabellen in der targetDB haben müssen.
Gruß
Christian
PS: Das Logfile sieht dann so aus
Synchronisation 12.11.2003 20:35:48
===================================
Tab1: löschen OKAY
Tab1: sync. OKAY
Tab2: löschen OKAY
Tab2: sync. OKAY
Tab3: löschen OKAY
Tab3: sync. OKAY
Tab4: löschen OKAY
Tab4: sync. OKAY
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
hallo christian,
es klappt!
allerdings nur, wenn die tabelle keine beziehungen hat und das hat sie leider .
ergo stimmt mein denkansatz nicht ganz, da es mit identischen tabellen kopien nicht ganz getan ist (gefährdung der datenintegität).
also müsste ich eine art lösch/aktualisiere/anfüge-abfrage haben um nahezu identische (eben bis auf gelöschte datensätze in der quelldatenbank die noch in beziehungen in der zieldatenbank stehen) tabellen zu bekommen.
doch nicht so einfach wie ich dachte, bzw. wozu oder wann braucht die datenbank überhaupt beziehungen?
viele grüsse
franz