Seite 1 von 1
MS SQL ODBC
Verfasst: 13. Juni 2012 14:34
von Marcus Breuer
Hallo Forum,
bitte Euch um Hilfe, denn ich verzweifle gerade. Ich habe Windows XP auf einer virtuellen Maschine unter Mac OS installiert. Darauf MS SQL Server 2008 Express.
Jetzt möchte ich mich via ODBC mit einer Datenbank verbinden. Ich habe schon tausende Variationen ausprobiert und weiter das Netz durchforstet. Irgendwie klappte nichts.
Ich habe meinen Verbindungsstring wie folgt aufgebaut:
Code: Alles auswählen
QString ServerName="PRIVAT-AD1B2688/SQLEXPRESS", DataBaseName="DBLookUp", UID="PRIVAT-AD1B2688/Marcus";
QString ConnectionString="DRIVER={SQL Server};SERVER=" + ServerName + ";DATABASE=" + DataBaseName + ";UID=" + UID + ";PWD=";
db.setDatabaseName(ConnectionString);
Das Programm kompiliert. Unter "Ausgabe der Anwendung" im Creator erscheint die folgende Meldung:
[Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben QODBC3: Unable to connect"
QSqlQuery::prepare: database not open
"QODBCResult::exec: No statement handle available"
Der Fehler hört sich zwar zu Teilen einfach an, aber gelöst bekomme ich ihn dennoch nicht.
Falls mir jemand weiterhelfen kann, ich wäre sehr sehr dankbar dafür.
Beste Grüße,
Marcus
Re: MS SQL ODBC
Verfasst: 13. Juni 2012 16:41
von Troll.Soft
moin,
unter XP gibt es den ODBC Datenquellen Administrator, zu finden unter Verwaltung. Wenn der nicht richtig konfiguriert ist geht nichts. Egal wie in Ordnung Dein Programm ist.
tschüß
Troll.Soft
Re: MS SQL ODBC
Verfasst: 13. Juni 2012 17:49
von Marcus Breuer
Super, vielen lieben Dank für deine Antwort. Damit komme ich sicher weiter.
Beste Grüße
Re: MS SQL ODBC
Verfasst: 13. Juni 2012 18:22
von Marcus Breuer
Ah, doch nicht so leicht, wie ich es mir vorgestellt hatte.
Ich bin so vorgegangen:
->Verwaltung -> (Reiter Benutzer-DSN) Hinzufügen -> SQL Server
Dann einen beliebigen Namen, keine Beschreibung und den Server so eingetragen, wie er im Code oben benannt ist.
Zwei Mal -> Weiter
Die Standarddatenbank ausgewählt und irgendwann ohne weitere Änderungen auf -> Fertigstellen
Die Verbindung wird ja noch kurz getestet und ist ok.
Kompiliere ich das Programm, kommt wieder dieselbe Meldung, wie zuvor.
Kannst Du mir nochmal weiterhelfen? Habe im Netz gerade eine Anleitung für eine Access-Datenbank gefunden und es genau so gemacht. Halt nur für meinen Fall.
Aber leider passiert nichts.
Viele Grüße
Marcus
Die Meldung ist doch nicht mehr ganz dieselbe. Hier nochmal der Code zum Verbinden:
Code: Alles auswählen
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
QString ServerName="PRIVAT-AD1B2688\SQLEXPRESS", DataBaseName="DBLookUp", UID="PRIVAT-AD1B2688\Marcus";
QString ConnectionString="DRIVER={SQL Server};SERVER=" + ServerName + ";DATABASE=" + DataBaseName + ";UID=" + UID + ";PWD=";
db.setDatabaseName(ConnectionString);
und hier die Meldung:
[Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben QODBC3: Unable to connect"
QSqlQuery::prepare: database not open
"QODBCResult::exec: No statement handle available
Re: MS SQL ODBC
Verfasst: 13. Juni 2012 21:21
von Troll.Soft
n,abend
den Code hatte ich mir vorhin nicht so genau angesehen, ist mir aber ein wenig kompliziert
wäre eine einfache Variante. Dieses "access" mußt Du dann im ODBC-Dialog von Windows als DatenQuellenNamen angeben. Schreibweise sollte übereinstimmen

tschüß
Troll.Soft
Re: MS SQL ODBC
Verfasst: 13. Juni 2012 23:22
von Marcus Breuer
Ach, klar. Das war jetzt mein Fehler. Jetzt steht die Verbindung zwar schonmal, aber ich kann noch keine Werte auslesen. Also db.open() liefert true zurück.
Muss ich noch irgendwas beachten? Auf einer SQLite Datenbank funktioniert alles wunderbar. Aber irgendwas funktioniert jetzt nicht.
Code: Alles auswählen
QSqlQuery query("Select * From LookUp");
query.setForwardOnly(true);
query.exec();
qDebug() << query.lastError().text();
Das liefert mir folgende Meldung:
QODBCResult::exec: Unable to execute statement: "[Microsoft][ODBC Driver Manager] Fehler in der Funktionsreihenfolge"
Re: MS SQL ODBC
Verfasst: 14. Juni 2012 19:44
von Troll.Soft
bool QSqlQuery::exec ()
Executes a previously prepared SQL query
moin,
obiges sagt die Doku zum exec() ohne Parameter
versuch es mal mit diesem Code und lies Dir ganz dringend die Doku über "prepared Statements" durch. Die Verwendung selbiger ist speziell beim speichern von exotischen Datentypen sehr hilfreich. Du verwendest oben ein query() das für prepared ... gedacht ist ohne etwas prepared zu haben

tschüß
Troll.Soft
Re: MS SQL ODBC
Verfasst: 15. Juni 2012 08:25
von Marcus Breuer
Guten Morgen,
vielen Dank für deine Nachricht. Ich konnte es leider nicht mehr ausprobieren, weil gestern der MSSQL Server gestreikt hat, nach einem Windows Update. Habe sonst nichts verändert, aber darum kümmere ich mich heute.
Ich könnte mir auch mal wieder an den Kopf fassen, denn die Doku zu den ODBC Geschichten hatte ich eigentlich gelesen und es da auch genauso gesehen, wie Du es geschickt hast.
Vielen Dank also nochmal. Beste Grüße,
Marcus
Re: MS SQL ODBC
Verfasst: 16. Juni 2012 16:14
von Marcus Breuer
Super, you made my day:) Es funktioniert jetzt perfekt. Vielen vielen Dank nochmal für deine Hilfe.
Beste Grüße