Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   C# DBF-Datenbank einlesen (https://www.delphipraxis.net/161700-dbf-datenbank-einlesen.html)

Matze 16. Jul 2011 13:28

Datenbank: dBase? • Version: - • Zugriff über: C#

DBF-Datenbank einlesen
 
Hi zusammen,

ich habe hier eine DBF-Datei, die ich mit C# einlesen möchte. Leider klappt das hinten und vorne nicht.
Versucht habe ich es so (Leerzeichen in der Pfadangabe gehen leider nicht :( ):

Code:
string dbfPah = @"C:\Dokumente und Einstellungen\Eingeschraenkt\Desktop\tmp\";

StringBuilder dbfShortPath = new StringBuilder(255);
GetShortPathName(dbfPah, dbfShortPath, dbfShortPath.Capacity);

dbfPah = dbfShortPath.ToString();

OdbcConnection oConn = new OdbcConnection();
oConn.ConnectionString = @"Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=" + dbfPah + ";Exclusive=No; Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;";
oConn.Open();

OdbcCommand oCmd = oConn.CreateCommand();
oCmd.CommandText = @"SELECT * FROM [" + dbfPah + "FILE.DBF]";
DataTable dt = new DataTable();
dt.Load(oCmd.ExecuteReader()); // Fehler
oConn.Close();

dataGridView1.DataSource = dt;
Bei
Code:
oCmd.ExecuteReader()
kommt immer der Fehler:

Zitat:

ERROR [42000] [Microsoft][ODBC dBASE Driver] Das Datenbankmodul kann 'C:\DOKUME~1\EINGES~1\Desktop\tmp\FILE.DBF' nicht finden. Stellen Sie sicher, dass es sich um einen gültigen Parameter oder Alias-Namen handelt, der keine ungültigen Zeichen oder falsche Zeichensetzung enthält und dessen Name nicht zu lang ist.
Der Pfad existiert jedoch genau so (C:\DOKUME~1\EINGES~1\Desktop\tmp\).

Wie funktioniert das?
Mit
Code:
System.Data.OleDb
geht's genauso wenig.

Grüße
Matze

mkinzler 16. Jul 2011 13:33

AW: DBF-Datenbank einlesen
 
Mal mit einem kürzeren Pfad getestet?

Matze 16. Jul 2011 13:35

AW: DBF-Datenbank einlesen
 
Ja, da kommt dann fast die gleiche Meldung:
Zitat:

ERROR [42S02] [Microsoft][ODBC dBASE Driver] Das Microsoft Jet-Datenbankmodul konnte das Objekt 'D:\tmp\FILE.DBF' nicht finden. Stellen Sie sicher, dass das Objekt existiert und dass die Namens- und Pfadangaben richtig eingegeben wurden.
Vielleicht ist die Art des Aufrufs auch falsch. Nur in einigen Foren wurde es so gemacht.

Mithrandir 16. Jul 2011 14:58

AW: DBF-Datenbank einlesen
 
Gibt die InnerException noch mehr Informationen?

//Edit:
Zitat:

Der Pfad existiert jedoch genau so (C:\DOKUME~1\EINGES~1\Desktop\tmp\).
Dadurch, dass es beim Aufbauen der Connection noch nicht knallt, gehe ich davon aus, dass er den Pfad auch findet.

Mithrandir 16. Jul 2011 15:17

AW: DBF-Datenbank einlesen
 
Eins noch: Sicher, dass es "echtes" dBase und nicht Visual Foxpro ist? Könnte sonst sein, dass du eher auf "VFPOLEDB" wechseln musst.

Matze 16. Jul 2011 17:06

AW: DBF-Datenbank einlesen
 
Ne, da geht gar nichts. Mal kommt die Pfad-Meldung, mal dass irgendeine Xbase-Memo-Datei nicht gefunden wird etc.

Edit: Halt, es geht. Danke. :firejump:
Ich dachte, die Datenbank sei die DBF-Datei, aber die anderen Dateien in dem Verzeichnis gehören dazu!
Aber es geht nur mit dem ganz kurzen Pfad (D:\tmp\), mit dem langen (auch in Kurzform) nicht.

Phoenix 16. Jul 2011 17:12

AW: DBF-Datenbank einlesen
 
Äh, blöde Frage... der Pfad ist im Connectionstring schon komplett angegeben und Du selektierst dann nochmal aus einem File mit komplettem Pfad?
Sollte das nicht ein einfaches SELECT * FROM FILE.DBF sein wenn der Pfad im ConnectionString schonmal angegeben wurde??

waldforest 16. Jul 2011 17:12

AW: DBF-Datenbank einlesen
 
Hallo,
mal probiert die Datei in Exel oder Access einzulesen um sicher zu sein, dass die Datei auch eine DBF ist.

Ich habe in der Vergangenheit den Header der Datei verändert um somit einen kleinen Zugriffschutz zu realisieren, konnte dann von Handelsüblichen Anwendungen nicht geöffnet werden.
.

Matze 16. Jul 2011 17:49

AW: DBF-Datenbank einlesen
 
Zitat:

Zitat von Phoenix (Beitrag 1112080)
Äh, blöde Frage... der Pfad ist im Connectionstring schon komplett angegeben und Du selektierst dann nochmal aus einem File mit komplettem Pfad?

Bingo, nun geht's auch mit langem Pfad, super danke. :thumb:

Zitat:

Zitat von waldforest (Beitrag 1112081)
mal probiert die Datei in Exel oder Access einzulesen um sicher zu sein, dass die Datei auch eine DBF ist.

Ich habe mir einen kostenlosen DBF-Viewer heruntergeladen und der zeigt den Inhalt an. Daher passt das schon und nun scheint es auch zu klappen.
Mal sehen, wie das mit dem Auslesen nun genau geht. Aber bisher sieht's gut aus.

Matze 17. Jul 2011 09:23

AW: DBF-Datenbank einlesen
 
Hm, bei einer anderen DBF-Datei erscheint beim Versuch, sie zu öffnen, folgender Fehler:
Zitat:

Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.
Was kann das nun wieder sein? :?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.

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