PDA

Vollständige Version anzeigen : Datenbank kopieren klappt nicht


Harry B.
23.10.2003, 16:37
Ich versuche mit folgender Routine alle Tabellen meiner A97-Datenbank in eine andere DB zu kopieren.

Private Sub CopyDB_Click(txtDatei)
Dim DB As Database
Dim cDstFile As String
Dim tdf As TableDef
Dim cSQL As String

cDstFile = Left(txtDatei, Len(txtDatei) - 4) + ".mdb"
If Dir(cDstFile) <> "" Then Kill (cDstFile)
Set DB = DBEngine.CreateDatabase(cDstFile, dbLangGeneral)

Set DB = CurrentDb
For Each tdf In DB.TableDefs
cSQL = "SELECT * INTO [" & tdf.name & "] IN '" & cDstFile & "' FROM [" & tdf.name & "];"
DoCmd.RunSQL (cSQL)
Next

End Sub

Leider findet For Each mehr Tabellen, als ich sehen kann! Woran liegt das und was muss ich ändern, damit nur die "sichtbaren" Tabellen kopiert werden?

Danke für die Hilfe!

Bärbel Ritzi
23.10.2003, 16:40
Hallo Harry,

es werden noch Systemtabellen gefunden. Filtere die über ein IF-Klausel einfach in der Schleife raus.
Überwiegend beginnen diese mit "MSyS"

Gruß
Bärbel

Arne Dieckmann
23.10.2003, 16:44
Das sind bestimmt die Systemtabellen, deren Name mit MSys beginnt.

Versuch deshalb mal:


Set DB = CurrentDb
For Each tdf In DB.TableDefs
If Left(tdf.Name, 4) <> "MSys" Then
cSQL = "SELECT * INTO [" & tdf.name & "] IN '" & cDstFile & "' FROM [" & tdf.name & "];"
DoCmd.RunSQL (cSQL)
end if
Next

Harry B.
23.10.2003, 16:48
Danke, funktioniert prima!

Klar, dass jetzt die Frage kommt: "Und was mache ich, wenn ich eine Tabelle habe, die mit "MSys" beginnt?" :angel:

Arne Dieckmann
23.10.2003, 16:52
Ist diese Frage ernst gemeint?
Soviele werden das ja wohl nicht sein. Die musst Du dann eben noch einmal extra kopieren, bzw. man müsste schauen, ob es eine Eigenschaft wie "hidden" (die Systemtabellen sind ja versteckt) oder so gibt.