PDA

Vollständige Version anzeigen : Datenbank exportieren


TOKO
10.05.2001, 22:17
Hallo Freaks,

wie kann ich mittels VBA von meiner Access 2000-Datenbank die Formulare, Berichte und Codes in eine andere vorhandene Access 97!!!-Datenbank exportieren, wobei die vorhandenen Objekte überschrieben werden sollen. Dabei sollen alle Objekte auf einmal exportiert werden, ohne für jedes Objekt einen extra Befehl eingeben zu müssen.

Ivonne
10.05.2001, 23:26
Hallo TOKO,
Access 97 und Access 2K sind 2 verschiedene Datenbankformate. In Deinem Fall mußt Du Deine Access 2K DB in Access 97 DB konvertieren.
Gehe da bitte in Access 2K auf Extra, Datenbank - Dienstprogramme, Datenbank konvertieren, In vorhergehende Access - Datenbankversion.
Wenn Du innerhalb Access 2K Teile exportieren willst, langt es wenn Du in Deiner Ziel - DB, unter Tabellen bzw. auf Abfrage per rechte Maustaste auf inportieren gehst und Dir dann die Daten aus der bestehenden DB inportierst.
Diese Technik geht aber nur so lange kein Passwortschutz auf dem VBA - Code ist. Bei einer MDE - Datei geht es auch nicht.

Gruß
Ivonne

kaybuch
11.05.2001, 08:15
Hallo,
dem kann ich nur zustimmen. Es gibt meines Wissens keine Möglichkeit über VB den Code der Versionen zu Übersetzen.
Evtl. kann eine Startprozedur eine z. B. neugeschriebene ini.txt einlesen. Wenn dort Parameter false dann nix, wenn ja dann VBA-Code für Save in vorheriger Version. Ich wüßte aber nicht wie das Speichern in einer vorherigen ACC-Version per VBA gesteuert werden sollte. Vielleicht weiß jemand anderes Rat und ob das überhaupt funktionieren kann.
Cu
Kay

kaybuch
11.05.2001, 08:37
Hi,
vergesst das mit der ini.txt ich dachte du willst von einer dritten accdb eine accdb in eine andere konvertieren.
kay

TOKO
11.05.2001, 10:08
Hallo Leute, danke für eure Beiträge.

Wenn ich aber in der Ziel-Db auf Importieren gehe, dann werden meine vorhandenen Objekte nicht überschrieben. Vielmehr werden zusätzliche Objekte hinzugefügt, z.B. Tabelle1, Formular1 usw.
Ich möchte aber mittels VBA die Objekte importieren, z.B. mit DoCmd.TransferDatabase. Da ich in VB keine große Leuchte bin, wäre ich dankbar, wenn mir einer einen Code geben könnte.

Ivonne
11.05.2001, 13:16
Hi Toko,

Versuche es mal auf diese Art:

Anstelle einer Überschreibung von Daten nimmst Du eine neue DB (Voraussetzung alles in Access 97 oder Access 2K).
fügst die Daten die neu sind und von Dir in eine Access 97 konvertiert wurden ein in die ganz neue DB.
Die Daten die älter sind und nicht aktualliesiert wurden nimmste dann von der alten DB.
Es muß am Schluss nur alles stimmen.

Aber wenn ich Dich recht verstanden habe in Deinem ersten Schreiben dann:

Genügt es ja immer Deine neuste zu konvertieren.

--> Verwende Versionsnummern dann kommste nicht durcheinander.

Auf diese Art haste dann nichts zu überschreiben.

Wenn Du nach all dem noch das Gefühl hast es müßte in einer neuen Access 97 DB stehen dann kannste in einer neuen DB die komplette, konvertierte DB importieren.

Vorteil dabei, die DB ist wieder schön schlank.
Denn Access hat meiner Meinung nach einen riesigen Fehler, Du kannst Tabellen oder Formen entfernen, die DB wird aber nicht schlanker.

Für den Fall das Du nicht importieren willst genügt es wenn Du unter Extra --> Optionen --> Allgemein einen Harken rein tust bei --> beim schließen komprimieren.

Nachteil bei größeren DB's komprimiert er eine Ewigkeit.

So, nun kannste Dir die beste Variante aussuchen die Dir am meisten zusagt.

Gruß
Ivonne

Nockenwelle
17.05.2001, 14:02
Hi,

ich bin auch gerade sowas am basteln.
Hab' mir dafür als Ansatz eine Funktion von Manuela besorgt. (Vielen dank nochmal, an dieser Stelle)
Ist nocht net ganz Färtig. Am Typ 6 bastel ich noch.
Ich weiß nicht, ob du bei Access 2000 noch extra die Version Angeben mußt. Typ 0 hab ich noch nicht ausprobiert, müßte aber gehen.

Cu

Public Function neue_DB_erstellen( _
lType As Long, _
ByRef sIn As String, _
chrDelimit As String) _
As Long


' Folgende Objekte kannst du auswählen für die Variable lType
' ***********************************************************
' 0 = Table
' 1 = Query
' 6 = Relation
' 2 = Form
' 3 = Report
' 4 = Macro
' 5 = Module
Dim dbs As DAO.Database
Dim conTmp As DAO.Container
Dim lCount As Long
Dim lCounter As Long
Dim retcode As String
Dim sDatei As String
Dim wks As Workspace
Dim dbNew As Database
On Error GoTo HandleErr
Set wks = DBEngine.Workspaces(0)


Set dbs = CurrentDb()
sDatei = "c:\neuedb.mdb"
' Überprüfen, welcher Type ausgewählt wurde
'Set dbNew = wks.CreateDatabase(sdatei, dbLangGeneral)

Select Case lType
Case 0
' Für Tabellen, Schleife über die DAO-TableDefs-Collection
lCount = dbs.TableDefs.Count
If lCount > 0 Then
For lCounter = 0 To lCount - 1
sIn = sIn & dbs.TableDefs(lCounter).Name
DoCmd.TransferDatabase acExport, "Microsoft Access", sdatei, acTable, dbs.TableDefs(lCounter).Name, dbs.TableDefs(lCounter).Name, True
If lCounter < lCount - 1 Then
sIn = sIn & chrDelimit
End If
Next lCounter
End If
Case 1
' Für Abfrage, Schleife über die DAO-QueryDefs-Collection
lCount = dbs.QueryDefs.Count
If lCount > 0 Then
For lCounter = 0 To lCount - 1
sIn = sIn & dbs.QueryDefs(lCounter).Name
DoCmd.TransferDatabase acExport, "Microsoft Access", sDatei, acQuery, dbs.QueryDefs(lCounter).Name, dbs.QueryDefs(lCounter).Name, False
If lCounter < lCount - 1 Then
sIn = sIn & chrDelimit
End If
Next lCounter
End If
Case 6
' Für Relationen, Schleife über die DAO-Relations-Collection
lCount = dbs.Relations.Count
If lCount > 0 Then
For lCounter = 0 To lCount - 1
sIn = sIn & dbs.Relations(lCounter).Name
If lCounter < lCount - 1 Then
sIn = sIn & chrDelimit
End If
Next lCounter
End If
Case Else
' Für die restlichen Objekte, können wir nicht die DAO-Collection
' nutzen, dafür nutzen wir den Container
Select Case lType
Case 2
Set conTmp = dbs.Containers("Forms")

Case 3
Set conTmp = dbs.Containers("Reports")
Case 4
Set conTmp = dbs.Containers("Scripts")
Case 5
Set conTmp = dbs.Containers("Modules")
Case Else
' Ein falscher Typ wurde angegeben
'Err.Raise vbObjectError + 2, Application.Name, "Error: " & _
Err.Number & ", "
End Select
' Ermittle die Anzahl der gefundenen Objekte
lCount = conTmp.Documents.Count
For lCounter = 0 To lCount - 1
If lCount > 0 Then
sIn = sIn & conTmp.Documents(lCounter).Name
Select Case lType
Case 2
DoCmd.TransferDatabase acExport, "Microsoft Access", sDatei, acForm, conTmp.Documents(lCounter).Name, conTmp.Documents(lCounter).Name
Case 3
DoCmd.TransferDatabase acExport, "Microsoft Access", sDatei, acReport, conTmp.Documents(lCounter).Name, conTmp.Documents(lCounter).Name
Case 4
DoCmd.TransferDatabase acExport, "Microsoft Access", sDatei, acMacro, conTmp.Documents(lCounter).Name, conTmp.Documents(lCounter).Name
Case 5
DoCmd.TransferDatabase acExport, "Microsoft Access", sDatei, acModule, conTmp.Documents(lCounter).Name, conTmp.Documents(lCounter).Name
End Select
If lCounter < lCount - 1 Then
sIn = sIn & chrDelimit
End If
End If
Next lCounter
End Select
neue_DB_erstellen = lCount
ExitHere:
On Error Resume Next
If Not dbs Is Nothing Then dbs.Close: Set dbs = Nothing
Exit Function
HandleErr:
Select Case Err.Number
Case Else
MsgBox "Fehler " & Err.Number & ": " & Err.Description, vbCritical, "basBeispiele.ObjectsToString"
End Select
End Function

Public Function TestObjectsToString2()

Dim lCount As Long
Dim sNames As String

lCount = neue_DB_erstellen(5, sNames, ";")

Debug.Print "Objekte: " & sNames
End Function