Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi FireDAC->DBASE geht das? (https://www.delphipraxis.net/177977-firedac-dbase-geht-das.html)

QuickAndDirty 9. Dez 2013 12:21

Datenbank: Dbase • Version: for Windows • Zugriff über: Firedac

FireDAC->DBASE geht das?
 
Hallo,
ich muss für einen Export nach DBase einen Zugriff auf dieses altehrwürdige Stück IT-Geschichte erlangen.
Leider bin ich garnicht mit dieser Sache vertraut.

Folgendes auf der haben Seite:
-Mit der "D7 Datenbankoberfläche" eine "Adressen.DBF" Datei/Datenbank/Tabelle gebaut.
-MDAC runtergaladen und installiert, vermutlich ist ODBC wohl nötig.
-Projekt mit dem man nach Firebird zugreifen kann um TADPhysODBCDriverlink erweitert.



Was noch fehlt:
-Was muss ich im ODBCAD32.exe einstellen, damit dieser mit der DBASE Datenbank kann?
-Wie haben die TADConnection.Parameter auszusehen?
[Edit]
-Habe im ODBCAD32.exe mal einen SystemDSN für die Datei angelegt
[/Edit]

Wäre nett, wenn auch nur Wissensschnipsel vorhanden sind, daas ihr sie postet, vielleicht ergibt sich dann noch ein Bild.

p80286 9. Dez 2013 12:51

AW: FireDAC->DBASE geht das?
 
Provider=MSDASQL.1;Persist Security Info=False;Data Source=dBASE Files
Ado für DBase via odbc

Die System DSN erfordert aber Admin-Rechte (Standard) da könntest Du Probleme bekommen

Pardon die Regeinträge hab ich vergessen:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI]

[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\dBASE Files]
"Driver"="C:\\Windows\\system32\\odbcjt32.dll"
"DriverId"=dword:00000215
"SafeTransactions"=dword:00000000
"UID"=""

[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\dBASE Files\Engines]

[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\dBASE Files\Engines\Xbase]
"ImplicitCommitSync"=""
"Threads"=dword:00000003
"UserCommitSync"="Yes"

[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\Excel Files]
"Driver"="C:\\Windows\\system32\\odbcjt32.dll"
"DriverId"=dword:00000316
"SafeTransactions"=dword:00000000
"UID"=""

[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\Excel Files\Engines]

[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\Excel Files\Engines\Excel]
"ImplicitCommitSync"=""
"Threads"=dword:00000003
"UserCommitSync"="Yes"
"FirstRowHasNames"=hex:01

[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\MS Access Database]
"Driver"="C:\\Windows\\system32\\odbcjt32.dll"
"DriverId"=dword:00000019
"SafeTransactions"=dword:00000000
"UID"=""

[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\MS Access Database\Engines]

[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\MS Access Database\Engines\Jet]
"ImplicitCommitSync"=""
"Threads"=dword:00000003
"UserCommitSync"="Yes"

[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources]
"MS Access Database"="Microsoft Access Driver (*.mdb)"
"Excel Files"="Microsoft Excel Driver (*.xls)"
"dBASE Files"="Microsoft dBase Driver (*.dbf)"

Fehlt nur noch die konkrete Datei.

Gruß
K-H

QuickAndDirty 9. Dez 2013 13:01

AW: FireDAC->DBASE geht das?
 
[Edit]
Das mit den Registry einträgen ist aber hart. Wie kommt man auf sowas?
[/Edit]
Habe eine System DSN und ein User DSN angeleget.
Die Connection parameter sehen bei mir für Firedac (ado können wir nicht einsetzen)
so aus
Code:
DriverID=ODBC
ODBCDriver=Microsoft DBase Driver (*.dbf)
also das sind die Parameter die funktionieren

Aus irgendeinem Grund muss er wohl diese auch noch haben, weil ich loginPrompt aktiviert habe.
Code:
User_Name=Dbase
Password=test
Das Problem ist ich weiß nicht wie ich der ADConnection sage sie soll diese DSN benutzen.
Bei mir steht da einfach das hier.
Code:
ODBCAdvanced= DSN=Adressen3
Das führt nicht zu nem Fehler....aber wenn ich ein Querry absetze
Code:
Select * from Adressen
Meldet er:
Zitat:

Das Microsoft jet-Datenbankmodul konnte das Objekt 'Adressen' nicht finden. Stellen Sie sicher, dass das Objekt existiert und dass die Namens- Pfadandgaben richtig angegeben wurden.
*hmpf*

Das selbe sagt er mit Adressen3 anstelle von Adressen .

QuickAndDirty 9. Dez 2013 13:13

AW: FireDAC->DBASE geht das?
 
Zitat:

Zitat von p80286 (Beitrag 1239089)
Fehlt nur noch die konkrete Datei.

Wo trage ich die ein?
Ein Import ist so sowieso nicht möglich...weil mein Spielsystem WIn2k ist.
Ich baue das mal um und gucke ob das etwas ändert wenn ich die Registryeinträge importiere.

Hmm
eine C:\\WinNT\\system32\\odbcjt32.dll
gibts da nicht

p80286 9. Dez 2013 13:58

AW: FireDAC->DBASE geht das?
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1239092)
[Edit]
Das mit den Registry einträgen ist aber hart. Wie kommt man auf sowas?
[/Edit]

Na alles was Du unter Verwaltung/ODBC einträgst landet in der Registry, Also warum den Umweg (wenn man weiß wie's geht)

Ich hab noch eine .DBF-Datei gefunden:
Code:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\dBASE Files]
"Driver"="C:\\Windows\\system32\\odbcjt32.dll"
"DefaultDir"="Das_ist_meine_Datei"
"Description"="dd"
"DriverId"=dword:00000215
"FIL"="dBase 5.0"
"SafeTransactions"=dword:00000000
"UID"=""

[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\dBASE Files\Engines]

[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\dBASE Files\Engines\Xbase]
"CollatingSequence"="ASCII"
"Deleted"=hex:00
"ImplicitCommitSync"=""
"PageTimeout"=dword:00000005
"Statistics"=hex:00
"Threads"=dword:00000003
"UserCommitSync"="Yes"
Zitat:

Zitat von QuickAndDirty (Beitrag 1239092)
Habe eine System DSN und ein User DSN angeleget.

Hoffentlich gibt's da keinen Namenskonflikt.

Zitat:

Zitat von QuickAndDirty (Beitrag 1239092)
Die Connection parameter sehen bei mir für Firedac (ado können wir nicht einsetzen)

Firedac kenn ich noch nicht.

[QUOTE=QuickAndDirty;1239092]
Das Problem ist ich weiß nicht wie ich der ADConnection sage sie soll diese DSN benutzen.
Bei mir steht da einfach das hier.
Code:
ODBCAdvanced= DSN=Adressen3
Das führt nicht zu nem Fehler....aber wenn ich ein Querry absetze
Code:
Select * from Adressen
Meldet er:
Zitat:

Das Microsoft jet-Datenbankmodul konnte das Objekt 'Adressen' nicht finden. Stellen Sie sicher, dass das Objekt existiert und dass die Namens- Pfadandgaben richtig angegeben wurden.
Ich denke Du solltest die Fehlermeldung wörtlich nehmen.
Und wie sieht es mit den Zugriffsrechten aus?????

Gruß
K-H

QuickAndDirty 9. Dez 2013 15:09

AW: FireDAC->DBASE geht das?
 
Zitat:

Zitat von p80286 (Beitrag 1239113)
Ich denke Du solltest die Fehlermeldung wörtlich nehmen.

Die Datei heisst Adressen.dbf
der DSN heist Adressen3

Ich habe gelesen das es probleme mit dem Case der Zeichen gibt, alles sollte ganz Groß oder ganz klein geschrieben sein?

Zitat:

Zitat von p80286 (Beitrag 1239113)
Und wie sieht es mit den Zugriffsrechten aus?????

Adminsitrator auf ein WIN2K system

Union 9. Dez 2013 15:17

AW: FireDAC->DBASE geht das?
 
Du könntest alternativ einen ADS Treiber verwenden. Der wird direkt von FireDAC unterstützt (TFDPhysADSDriverLink). Das sind 2 Dll und fertig. Kein ODBC, keine Registry, keine Probleme.

p80286 9. Dez 2013 15:26

AW: FireDAC->DBASE geht das?
 
[OT]
Zitat:

Zitat von Union (Beitrag 1239130)
Du könntest alternativ einen ADS Treiber verwenden. Der wird direkt von FireDAC unterstützt (TFDPhysADSDriverLink). Das sind 2 Dll und fertig. Kein ODBC, keine Registry, keine Probleme.

So schön und es ist wahr?
[/OT]

Gruß
K-H

QuickAndDirty 9. Dez 2013 15:45

AW: FireDAC->DBASE geht das?
 
Zitat:

Zitat von Union (Beitrag 1239130)
Du könntest alternativ einen ADS Treiber verwenden. Der wird direkt von FireDAC unterstützt (TFDPhysADSDriverLink). Das sind 2 Dll und fertig. Kein ODBC, keine Registry, keine Probleme.

Wo finde ich die 2 DLLs?
[Edit]
Ich lade gerade arc32.exe herunter, ich denke das es das ist ?
[/Edit]

Union 9. Dez 2013 16:33

AW: FireDAC->DBASE geht das?
 
Eigentlich ist das das SQL-Tool zu ADS, aber es enthält wohl auch die Dlls. Es sind in den neueren Versionen 4 dll:
  • ace32.dll (Der eigentliche Treiber)
  • axcws32.dll (Die Kommunikationsschicht)
  • adsloc32.dll (Der embedded Server)
  • aicu32.dll (Die Unicode-Unterstützung)

Für dBase brauchst Du wahrscheinlich die 4. nicht. Die Installation schmiß früher die dlls immer ins system32. Dort holst Du Dir die dann raus und schiebst sie in Deinen Pfad bzw. zur Benutzung durch Arc32 in dessen Programmverzeichnis, dann ist das sauber.
[edit]
Die Client-Engine findest Du hier. Darauf wird auch in der FireDAC/ADS-Doku zu XE5 verwiesen.[/edit]

QuickAndDirty 9. Dez 2013 16:52

AW: FireDAC->DBASE geht das?
 
Zitat:

Zitat von Union (Beitrag 1239139)
Eigentlich ist das das SQL-Tool zu ADS, aber es enthält wohl auch die Dlls. Es sind in den neueren Versionen 4 dll:
  • ace32.dll (Der eigentliche Treiber)
  • axcws32.dll (Die Kommunikationsschicht)
  • adsloc32.dll (Der embedded Server)
  • aicu32.dll (Die Unicode-Unterstützung)

Für dBase brauchst Du wahrscheinlich die 4. nicht. Die Installation schmiß früher die dlls immer ins system32. Dort holst Du Dir die dann raus und schiebst sie in Deinen Pfad bzw. zur Benutzung durch Arc32 in dessen Programmverzeichnis, dann ist das sauber.
[edit]
Die Client-Engine findest Du hier. Darauf wird auch in der FireDAC/ADS-Doku zu XE5 verwiesen.[/edit]

Habe folgende parameter eingestellt

DriverID=ADS
Database=c:\Daistsie\Adressen.dbf
[Edit]
TableTyppe=VFP
ändert erst mal nichts
[/Edit]
Da meint er "Error 6420" kann das sein?
"The 'discovery' process of the Advantage Database Server faile. Unable to connect to the Advantage Database Server. axServerConnect."

Union 9. Dez 2013 17:13

AW: FireDAC->DBASE geht das?
 
Schau mal in der Doku. Um den Server lokal (also ohne Server-Dienst) zu verwenden musst Du das auch im Treiber einstellen:
Code:
ADS_LOCAL_SERVER = 1
Und Database ist das Verzeichnis. Den Tablename setzt Du in der FDQuery oder FDTable.

QuickAndDirty 9. Dez 2013 17:31

AW: FireDAC->DBASE geht das?
 
YAY!!!!!
Also, ich denke das war jetzt das was fehlte! Es scheint zu funktionieren.
Danke euch beiden, für die Hilfe!

Ich schreibe mal 'nen Abschluss Post,das künftige Fragesteller sich nicht alles durchlesen müssen:

Um mit Firedac ein DBase machen zu können habe ich folgendes gemacht

TADConnection.Param konfiguriert
Code:
DriverID=ADS
TableType=VFP
ServerTypes=Local
Database=c:\DerOrdnerDerDB
Delphi-Quellcode:
MyADConnection.LoginPrompt := false;
Mich hier angemeldet (Get a Free Trial) :
http://www.sap.com/pc/tech/database/...ver/index.html

Und unter dem Punkt "Others" die Advantage API für Windows 32 heruntergeladen und installiert.

Danach muss man Delphi neustarten....


Danach müsste es gehen.

...

Habe die ODBC Dbase Verbindung nun auch hin bekommen.

Wenn man einen Fertigen DSN hat
dann muss der PARAMS wert
von ADConnection wie folgt aussehen
Zitat:

DRIVERID=ODBC
ODBCAdvanced=DSN=Adressen2
Adressen2 ist mein User_DSN der verweist auf den Ordner in der die Adressen.DBF liegt.
Den DSN kann man im ODBCad32.exe einstellen...
evtl. muss man vorher MDAC runterladen und installieren.

joschmidt 24. Jan 2014 09:26

AW: FireDAC->DBASE geht das?
 
Ich habe gemäß den Angaben von Embarcadero den Zugriff mit FireDac auf eine dbase-Datei erfolgreich eingerichtet.
Ich kann die Daten auch z.B. in einem StringGrid anzeigen lassen aber die Umlaute werden nicht korrekt angezeigt (ü verschwindet völlig, ß wird zu á usw.). Experimente mit Charset=.. unter FDConnection.Params zeigen keine Wirkung.
Unter den Advantage Dateien aus dem Ordner REDISTRIBUTE ist eine Konfigurationsdatei (adslocal.cfg) in der man ebenfalls Einträge zum Zeichensatz vornehmen kann - auch das hat leider keine Wirkung.
Jetzt bin ich ratlos ...

Union 24. Jan 2014 10:26

AW: FireDAC->DBASE geht das?
 
Was hast Du genau gemacht? Setzt Du die Remote-Server oder die Local-Connection ein? Falls Remote, musst Du das verwendete Charset in der Serverkonfiguration angeben, ADSLocal hat dann keine Auswirkung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz