Laden...

Zugriff auf DBF Dateien

Erstellt von Taladan vor 11 Jahren Letzter Beitrag vor 5 Jahren 8.809 Views
Taladan Themenstarter:in
582 Beiträge seit 2008
vor 11 Jahren
Zugriff auf DBF Dateien

verwendetes Datenbanksystem: DBF

Hallo.
Ich habe ein Progamm, welches per ActiveX angesteuert wird und bestimmte Dinge ausführt. Die Schnittstelle liefert mir dann zurück, wie viele Fehler es gab, aber nicht welche. Diese stehen in DBF-Dateien.
Nun wollte ich die DBF-Dateien auslesen und die Fehler herausfiltern. Doch bisher ist mir das nicht gelungen. Ich weiß nicht, mit welcher Engine die DBF Dateien geschrieben werden. Verbindungen können geöffnet werden, aber ich kann z.B. kein DataSet damit befüllen und erhalte nur eine Fehlermeldung "Die externe Tabelle hat nicht das erwartete Format."
Über Excel läßt sich die Datei ohne Probleme öffnen.

Weiß jemand rat?

Hier der letzte Verwendete Beispielcode:


            if (!string.IsNullOrWhiteSpace(filename) && System.IO.File.Exists(filename))
            {
                string path = System.IO.Path.GetDirectoryName(filename);
                string name = System.IO.Path.GetFileNameWithoutExtension(filename);

                string constr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=dBASE IV;User ID=Admin;Password=;", path);
                using (OleDbConnection con = new OleDbConnection(constr))
                {
                    var sql = "select * from " + name;
                    OleDbCommand cmd = new OleDbCommand(sql, con);
                    con.Open();
                    DataSet ds = new DataSet(); ;
                    OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                    da.Fill(ds); // Hier kommt der Fehler
                    return ds;
                }
            }


Gruß dat Tala

F
10.010 Beiträge seit 2004
vor 11 Jahren

Der Connectionstring sieht OK aus, nur wäre das sowieso viel zu viel Code da der DataAdapter SqlCommand und Connectionstring benutzen könnte das selber zu erstellen.

Bist du sicher das das eine DBF Datei ist?
Nicht das es eine CSV mit anderem Dateinamen ist.

1.820 Beiträge seit 2005
vor 11 Jahren

Hallo!

Schau dir man den Database-Explorer an, der kann auch DBF-Dateien ohne zusätzliche Treiber öffnen.

In einem der oberen Beiträge ist auch ein Beispiel, wie man die Abfrage in eigenen Programmen verwenden kann.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Taladan Themenstarter:in
582 Beiträge seit 2008
vor 11 Jahren

Ja. Es ist eine DBF. Mit jeder .DBF wird noch eine .FPT erstellt, falls das weiter hilft.

Welche Codezeilen sind den Überflüssig?

Ich habe mal ein paar Dateien mit dem Database-Explorer geöffnet. Als ich mir die Daten per abfrage anschauen wollte, erhalte die fehlermeldung "Fehler in der Abfrage: Der Index lag außerhalb des Bereiches. Er muss nicht negativ oder kleiner als die Auflistung sein. Parametername index".

Die Tabellen in der DBF haben auch eine seltsame struktur. Sie haben zwar Kopfzeilen, aber es folgen Informationszeilen, dann die eigentliche Auflistung der Daten und dann eine Gesamt/Summierungszeitel. Die Spaltenanzahl wird zwar nicht überschritten, aber die Zeilen sehen schon ein wenig seltsam dadurch aus.

Gruß dat Tala

F
10.010 Beiträge seit 2004
vor 11 Jahren

if (!string.IsNullOrWhiteSpace(filename) && System.IO.File.Exists(filename))
{
    string path = System.IO.Path.GetDirectoryName(filename);
    string name = System.IO.Path.GetFileNameWithoutExtension(filename);

    string constr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=dBASE IV;User ID=Admin;Password=;", path);
              
    var sql = "select * from " + name;
    DataSet ds = new DataSet(); ;
    OleDbDataAdapter da = new OleDbDataAdapter(sql,constr);
    da.Fill(ds); // Hier kommt der Fehler
    return ds;
}

Das sind Dateien von FoxPro, evtl hilft es den Foxpro treiber zu installieren und zu benutzen.
http://connectionstrings.com/visual-foxpro

Taladan Themenstarter:in
582 Beiträge seit 2008
vor 11 Jahren

Hi,

wenn der gleiche Rechner die Dateien auch erstellt, sollte dann nicht bereits ein Treiber vorhanden sein?

Ich finde wohl einen installierten ODBC Treiber, aber auch Sybase Treiber, kann es sein, dass es Sybase DBF Dateien sind?

Gruß dat Tala

F
10.010 Beiträge seit 2004
vor 11 Jahren
Taladan Themenstarter:in
582 Beiträge seit 2008
vor 11 Jahren

Hi,

ich kann mit diesen vielen dutzend Varianten leider nichts anfangen. Was muss ich den genau ausprobieren? Zudem ich damit bisher auch keine Berührungspunkte hatte (also mit Connectionstrings). Kann man das nicht auch anhand der Systemtreiber sehen oder der eingerichteten ODBC Datenquellen?

Gruß dat Tala

S
324 Beiträge seit 2007
vor 11 Jahren

DBF mit FPT können auch Foxpro sein 😉

http://connectionstrings.com/visual-foxpro

F
10.010 Beiträge seit 2004
vor 11 Jahren

Hatte ich ihm schon geschrieben.

@Taladan:
Was ist so schwer daran einfach mal im OleDb Connectionstring das auszutauschen was bei Connectionstrings unter OleDb steht?
Wenn du das bisschen nicht verstehst, solltest du es dir auf jeden Fall genau anschauen,
denn DB Entwicklung ohne zu wissen was Du da tust ist selten zielführend.

B
1 Beiträge seit 2019
vor 5 Jahren

Ich hatte bei Verwendung des Codes den der angegebenen Stelle den Fehler

Fehlermeldung:
System.Data.OleDb.OleDbException: "Das Microsoft Jet-Datenbankmodul konnte das Objekt '(Dateiname)' nicht finden. Stellen Sie sicher, dass das Objekt existiert und dass die Namens- und Pfadangaben richtig eingegeben wurden."

Bei der Suche habe ich in der Entwickler-Ecke eine Antwort gefunden: "Die MS-Jet-Engine kann bei DBF-Dateien keine langen Dateinamen verarbeiten! 😒hock: Leg die DBF in einen Pfad, bei dem kein Verzeichnisname die 8+3-Norm bricht (und auch keine Leerzeichen enthält, DOS-Pfade eben), beim Dateinamen das gleiche, 8+3."
Nachdem ich das berücksichtigt habe klappt der Zugriff.
Ziel: Ich will eine alte Delphi Lösung in C# neu implementieren.