MS SQL ODBC

Alles rund um die Programmierung mit Qt
Antworten
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

MS SQL ODBC

Beitrag 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
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Re: MS SQL ODBC

Beitrag 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
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Re: MS SQL ODBC

Beitrag von Marcus Breuer »

Super, vielen lieben Dank für deine Antwort. Damit komme ich sicher weiter.

Beste Grüße
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Re: MS SQL ODBC

Beitrag 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
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Re: MS SQL ODBC

Beitrag von Troll.Soft »

n,abend
den Code hatte ich mir vorhin nicht so genau angesehen, ist mir aber ein wenig kompliziert :)

Code: Alles auswählen

db.setDatabaseName("access");
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
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Re: MS SQL ODBC

Beitrag 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"
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Re: MS SQL ODBC

Beitrag von Troll.Soft »

bool QSqlQuery::exec ()
Executes a previously prepared SQL query
moin,
obiges sagt die Doku zum exec() ohne Parameter

Code: Alles auswählen

   query.exec(Select * From LookUp");
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
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Re: MS SQL ODBC

Beitrag 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
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Re: MS SQL ODBC

Beitrag von Marcus Breuer »

Super, you made my day:) Es funktioniert jetzt perfekt. Vielen vielen Dank nochmal für deine Hilfe.

Beste Grüße
Antworten