ODBC, Daten aus Excelliste lesen
-
Hi,
ich versuche mittels ODBC Daten aus einer Excelliste in mein C++-Programm zu importieren. Ich habe mir hierzu auf http://www.codeproject.com/KB/database/excel_odbc.aspx das Beispielprojekt heruntergeladen.
Die im zip-file enthaltene Exe funktioniert, hiermit kann ich di Daten aus der Excelliste auslesen und im Dialog anzeigen.
Wenn ich den Quelltext jeodch kompiliere und die exe erzeuge, egal ob debug oder release, bekomme ich beim Versuch die Daten zu lesen folgende Fehlermeldung:Database error: Das Microsoft Jet-Datenbankmodul konnte das Objekt `demo_table` nicht finden. Stellen Sie sicher, dass das Objekt existiert und das die Namens- und Pfandangaben richtig eingegeben werden.
Ich benutze Visual C++ 6.0.
Den ODBC-Treiber habe ich mit AccessDatabasEngine installiert.Hat denn jemand eine Vermutung weshalb dieser Fehler auftritt?
-
Ok, Problem gefunden.
Es muss der absolute Pfad angegeben werden, in dem sich das Excelsheet befindet.
Wohl auch dann wenn sich exe und excelsheet in gleichem Ordner befinden.
Warum ist mir allerdings unklar?! In der bereits erzeugten exe wurde das ja auch nicht gemacht.
-
In meinem Programm funktioniert es leider nicht.
Man findet das Excelsheet nicht.void CDlgPnEval::getDiagData() { CDatabase database; CString sFile = "ReadExcel.xls"; CString sDriver; CString sDsn; CString sSql; CString sItem1, sItem2; sDriver = getExcelDriver(); if (sDriver.IsEmpty()) { // Blast! We didn´t find that driver! AfxMessageBox("No Excel ODBC driver found"); return; } sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s", sDriver, sFile); database.Open(NULL, false, false, sDsn); CRecordset recset(&database); sSql = "SELECT field_1, field_2 " "FROM demo_table " "ORDER BY field_1"; // Execute that query (implicitly by opening the recordset) recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly); // Browse the result while (!recset.IsEOF()) { // Read the result line recset.GetFieldValue("field_1", sItem1); recset.GetFieldValue("field_2", sItem2); AfxMessageBox(sItem1); // Skip to the next resultline recset.MoveNext(); } // Close the database database.Close(); }
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Dein Problem ist das Current Working Directory.
Wenn das nicht auf dem selben Verzeichnis steht, wie der Pfad Deiner EXE, dann kann es nicht gehen.Arbeite immer mit absoluten Pfaden!
-
Danke Martin!
Aus der Excelliste werden nur die ersten 3 Werte ausgelesen. Danach ist dann Schluß. Wenn ich CRecordset::isEOF() nicht auswerte, bekomme ich die Meldung ungültige Cursorposition. Womit hängt dies zusammen?