Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

DBase-Datei in eine ACCESS-Datenbank umwandeln





Frage

Ich möchte eine DBase-Datei in eine ACCESS-Datenbank umwandeln. Dafür habe ich folgende Funktion: Private Function Copy_dBaseToAccess(ByVal FilenameDBase As _ String, ByVal FilenameAccess As String, _ Optional ByVal DeleteIfExists As Boolean = True) As Boolean Dim dbDBase As Database Dim TabDBase As Recordset Dim dbAccess As Database Dim TabAccess As Recordset Dim PathDBase As String Dim NameDBase As String Dim TabDef As New TableDef Dim Feld As New Field Dim I As Integer Dim Dummy As String PathDBase = Left$(FilenameDBase, _ InStrRev(FilenameDBase, "") - 1) NameDBase = Mid$(FilenameDBase, Len(PathDBase) + 2) NameDBase = Left$(NameDBase, InStrRev(NameDBase, ".") - 1) dBASE-Datei öffnen Set dbDBase = Workspaces(0).OpenDatabase(PathDBase, _ False, False, "dBASE IV;") Set TabDBase = dbDBase.OpenRecordset(NameDBase) ACCESS-Datei erstellen If Dir(FilenameAccess) = "" Then Set dbAccess = Workspaces(0).CreateDatabase(FilenameAccess, _ dbLangGeneral, dbEncrypt) Else Set dbAccess = Workspaces(0).OpenDatabase(FilenameAccess) End If Prüfen, ob Tabelle vorhanden On Local Error Resume Next Dummy = dbAccess.TableDefs(NameDBase).Name If Err.Number = 0 Then Tabelle existiert bereits !!! If DeleteIfExists Then dbAccess.TableDefs.Delete NameDBase Else Copy_dBaseToAccess = False GoTo Copy_dBase_End End If End If Err.Number = 0 On Local Error GoTo Copy_dBase_Error Tabellen-Definition übertragen TabDef.Name = NameDBase For I = 0 To TabDBase.Fields.Count - 1 With TabDBase.Fields(I) Feld.Name = .Name Feld.Type = .Type Feld.Size = .Size Feld.AllowZeroLength = .AllowZeroLength Feld.Attributes = .Attributes Feld.DefaultValue = .DefaultValue Feld.Required = .Required End With TabDef.Fields.Append Feld Set Feld = Nothing Next I dbAccess.TableDefs.Append TabDef Access-Tabelle öffnen und Datensätze übertragen Set TabAccess = dbAccess.OpenRecordset(NameDBase) While Not TabDBase.EOF TabAccess.AddNew For I = 0 To TabDBase.Fields.Count - 1 TabAccess(I) = TabDBase(I) Next I TabAccess.Update TabDBase.MoveNext Wend Copy_dBaseToAccess = True Copy_dBase_End: On Local Error Resume Next TabDBase.Close: dbDBase.Close TabAccess.Close: dbAccess.Close On Local Error GoTo 0 Exit Function Copy_dBase_Error: MsgBox "Fehler !!!" & vbCrLf & Err.Number & _ " " & Err.Description, 16, "FEHLER..." Copy_dBaseToAccess = False Resume Copy_dBase_End End Function -------------------------------------- Beim kompilieren bekomme ich immer die Meldung Unzulässige Verwendung des Schlüsselworts New der Debugger markiert dabei die Zeile Dim Feld As New Field kann jemand da weiterhelfen?

Antwort 1 von PotzBlitz

Hallo DixiDix,

lass das Schlüsselwort "New" bei TableDef und Field weg, das ist bei diesen Objekten nicht zulässig. Wenn du ein Tabellen-Objekt anlegen willst, dann benutze die CreateTableDef-Methode des Database-Objekts. An das neue TableDef-Objekt hängst du dann mit der Append-Methode des TableDef-Objekts die neuen Felder an, die du vorher mit der CreateField-Methode des TableDef-Objekts erzeugt hast. Wie du siehst ein recht aufwändiges Unterfangen (was aber zum Glück in der Access-Hilfe ausreichend beschrieben wird).

Wäre es da nicht einfacher, die dBASE-Datenbank einfach nur zum importieren? Siehe Menü Datei | Externe Daten | Importieren | Im Importieren-Dialog den Dateityp "dBASE IV" auswählen

Das war es dann auch eigentlich schon. Wenn du aber bei der VB-Variante bleiben willst, dann könntest du den Import auch mit der TransferDatabase-Methode des DoCmd-Objekts machen, das wäre dann dasselbe in grün.

Gruss
PotzBlitz

Antwort 2 von DixiDix

Natürlich wäre es einfacher mit der Importfunktion, aber mit dBase und FoxPro 2.6 Files hab ich Probleme damit. Ich suche eine Möglichkeit vor allem FoxPro Files zu verknüpfen. Mit Access 97 ging das noch ohne Probleme. Hab mir eben gedacht, dass ich von vorherein dem aus dem Weg gehe und mir auf diesem Weg die Daten zugänglich mache. Falls es natürlich einen einfacheren und vorallem schnelleren Weg gibt, wäre ich damit auch zufrieden. Solange eine Verknüpfung nicht möglich ist, bin ich auf andere Lösungen angewiesen. Diese lässt sich, sofern sie funktioniert, ganz leicht automatisieren.

Antwort 3 von 14071

Hallo DixiDix,

ist ja merkwürdig, ich hatte Probleme unter Access97 auf FoxPro-Dateien zuzugreifen. Seit der 2000-er Version geht´s jetzt. Habe mir eine Datenbankquelle erstellt und den FoxPro-Container eingebunden, damit entfällt auch das ständige herauslösen gebundener Tabellen.

Gruß
Jürgen

Antwort 4 von DixiDix

Ging sicherlich über ODBC. Kannst Du mir erklären, wie Du das angestellt hast?

Antwort 5 von 14071

na klar - Datei-ExterneDaten-Tabellen verknüpfen- bei Dateityp ODBC-Databases auswählen - Reiter Computerdatenquelle.
Neue auswählen und wichig - "Microsoft Visual-FoxPro Treiber" auswählen. Gibt auch nur Visual-FoxPro (Wenn das MS nicht vorne dran stand ging´s nicht.)

Dann beim Pfad zur Datenquelle angeben, wo der Datenbankcontainer liegt - und fertig. Dann kannst Du beim nächsten Aufruf der externen Tabellen über Odbc die Tabellen direkt einbinden. (jedenfalls funzt es hier - hoffe bei Dir auch)

Gruß
Jürgen

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: