VC++ --- ODBC Mysql Connector gibt nur ein Ergebniss
-
Hallo zusammen
Ich will eine Verbindung zwischen meinem vc++ Programm in Visual Studio 2008 und einer Mysql Datenbank herstellen. Es funktioniert auch alles soweit außer das Ich immer nur ein Ergebniss bekomme.Also meine Datenbank Tabelle sieht so aus:
CREATE TABLE `data`.`ort` ( `ort_id` int(10) unsigned NOT NULL auto_increment, `ort_name` varchar(45) NOT NULL, PRIMARY KEY (`ort_id`) );
Drinnen sind 5 Einträge:
SELECT * FROM `data`.`ort`
ort_id ort_name
1 lager1
2 lager2
3 lager3
4 lager4
5 lager5Wenn ich nun diese Funktion ausführe gibt er mir nur ein Ergebniss aus:
String ^MyConString = "DRIVER={MySQL ODBC 5.1 Driver};" + "SERVER=192.168.1.134;USER=monty; PASSWORD=blubb;DATABASE=data;"; Odbc::OdbcConnection ^test = gcnew Odbc::OdbcConnection(MyConString); test->Open(); String ^befehl = "SELECT ort_name FROM ort;"; Odbc::OdbcCommand ^cmd = gcnew Odbc::OdbcCommand(befehl,test); Odbc::OdbcDataReader ^readi; readi = cmd->ExecuteReader(); readi->Read(); listBox1->Items->Add(readi->GetString(0)); bool tbool=readi->NextResult(); while(readi->NextResult()) { listBox1->Items->Add(readi->GetString(0)); } readi->Close(); test->Close();
readi->NextResult() gibt immer false zurück. Und dementsprechend gibts nur das erste Ergebniss aus.
Ich hoffe ihr könnt mir helfen. Vielen Dank schonmal.
MfG TIm
-
Hallo,
du hast keine SQL-Batch-Anweisung abgesetzt, die mehrere Ergebnismengen (eine Ergebnismenge kann wiederum aus mehreren Datensätzen bestehen) zurück gibt, sondern eine einfache (die nur eine Ergebnismenge, hier mit mehreren Datensätzen, zurück gibt). Du musst immer wieder Read aufrufen, um zum nächsten Datensatz zu gelangen!
MfG,
Probe-Nutzer
-
Ahhhh Ok ich dachte das hätte ich auch versucht^^ naja egal...
kannst du mir kurz sagen welche Befehle ich brauche um das als Batch Anweisung abzusetzen(muss dann später auch andere Sachen machen wo sich das bestimmt lohnt)?
Wenn dus net ausm Kopf weißt isses net schlimm, vlt finde ichs selber bald^^
Vielen Dank und viele Grüße
Tim
-
Der einzige Unterschied, wenn du mehrfache Ergebnismengen hast, ist nur, dass du erst ReadNext ausführen musst, und dann jeweils immer wieder Read, und das für jede Ergebnismenge. Ich wüsste jetzt nicht, dass man noch irgendeine Eigenschaft setzen muss oder ähnliches. Um noch mal deutlich zu machen, was ein SQL-Batch ist: das kann z.B. so aussehen:
SELECT * FROM ...;
SELECT * FROM ...Wenn man also mehrere Anweisungen(oben SELECTs) in einem OdbcCommand "abschickt" (in befehl stehen also mehrere Anweisungen, die ein Resultat zurück geben können), dann spricht man von einem "SQL-Batch".
D.h., es geht nicht darum, wie man dein Beispiel als SQL-Batch schreiben kann..., das muss man nicht als Batch umschreiben.
Ich habe das z.B. bisher noch nie benötigt.
MfG,
Probe-Nutzer
-
Ok vielen Dank!
Hat mir sehr geholfen
Viele Grüße
Tim