Query was Empty, Mysql++, C++
-
Hallo,
wenn ich folgendes Programm ausführe bekomme ich im Programm die Fehlermeldung Error: Query was Empty. Verursacht wird dies durch den Execute Befehl ziemlich am Ende des Programs. Eigentlich sollte dadurh der Eintrag in die Datenbank üernommen werden. Bin quasi gestern mit Datenbankprogrammiern angefangen und somit hier absoluter Newbie. Ist also vermutlich nur ein kleiner dummer Fehler der mir mittlerweile 2 Stunden meinen Kopf hat zerbrechen lassen.
Schreibe hier mal den Quellcode rein, wäre nett, wenn sich jemand mit mehr Ahnung als ich, den mal kurz anaschauen könnte:#include <iostream> #include <iomanip> #include "mysql++.h" #include <custom.hh> sql_create_9 (Barkasse, 1, 9, int, index, int, belegnr, int, datum_t, int, datum_m, int, datum_j, string, titel, float, betrag, string, kostenstelle, string, posten) int main() { try { // Die Verbindung wird mit dem Befehl Connection hergestellt // Connection(cchar *db, cchar *host="", cchar *user="", cchar *passwd="") Connection con("", "", "", ""); // This creates a query object that is bound to con. Query query = con.query(); // You can write to the query object like you would any other ostrem query << "select * from Barkasse"; // Von der Tabelle querre werden die Datensätze in res abgespeichert Result res = query.store(); // Query::preview() simply returns a string with the current query string in it. cout << "Query: " << query.preview() << endl; // .size() gibt die Anzahl der Datensätze aus res aus cout << "Records Found: " << res.size() << endl << endl; // The Result class has a read-only Random Access Iterator Row row; // Neue Reihe initialisieren Barkasse newrow; newrow.set(1,5,5,5,5,"5",5,"5","5"); // Neu angelegte Zeile in Datenbank einfügen query.insert(newrow); cout << "Query : " << query.preview() << endl; // Befehl bestätigen query.execute();
...
Habe den Rest mal weggeschnitten, wiel ich denke, dass der hier unwichtig ist, und nicht das Forum unnötig aufblähen soll.Schonmal DAnke im Voraus für eure Hilfe, Gruß Peter
<hume sagt>Bitte Code-Tags verwenden!</hume sagt>
-
ich sehe grad nicht durch..
aber vielleicht hilft dir das beispiel aus dem tutorial4.5.2 Adding Data SSQLS can also be used to add data to a table. The file name for this code is custom2.cc #include <iostream> #include <vector> #include <sqlplus.hh> #include <custom.hh> #include "util.hh" // util.hh/cc contains the print_stock_table function sql_create_5(stock, 1, 5, string, item, int, num, double, weight, double, price, Date, sdate) int main() { try { // its in one big try block Connection con(use_exceptions); con.connect("mysql_cpp_data"); Query query = con.query(); stock row; // create an empty stock object /* row.item = "Hot Dogs"; row.num = 100; row.weight = 1.5; row.price = 1.75; row.sdate = "1998-09-25"; */ row.set("Hot Dogs", 100, 1.5, 1.75, "1998-09-25"); // populate stock query.insert(row); // form the query to insert the row // the table name is the name of the struct by default cout << "Query : " << query.preview() << endl; // show the query about to be executed query.execute(); // execute a query that does not return a result set print_stock_table(query); // now print the new table; } catch (BadQuery er) { cerr << "Error: " << er.error << endl; return -1; } catch (BadConversion er) { cerr << "Error: Tried to convert \"" << er.data << "\" to a \"" << er.type_name << "\"." << endl; return -1; } }
aus:
http://www.mysql.com/documentation/mysql++/4_Tutorial.htmlwas ist barkasse newrow?
-
Das Beispiel hatte ich zur Hilfe genommen. Habe auch das tutorial langsam durch gearbeitet, und mein Programm ergänzt. Kann mir nicht erklären, warum das nicht klappt.
Gruß Peter
P.S.: Barkasse ist oben in der struct definiert
-
hi
hat mir keine ruhe gelassen:
habe dein programm abgespeckt, kurz ne minidb angelegt..
sql_create_9 (Barkasse, 1, 9, int, index, int, belegnr, int, datum_t, int, datum_m, int, datum_j, string, titel, float, betrag, string, kostenstelle, string, posten) int main() { try { // Die Verbindung wird mit dem Befehl Connection hergestellt // Connection(cchar *db, cchar *host="", cchar *user="", cchar *passwd="") Connection con("barkasse"); // This creates a query object that is bound to con. Query query = con.query(); // You can write to the query object like you would any other ostrem /* query << "select * from Barkasse"; // Von der Tabelle querre werden die Datensätze in res abgespeichert Result res = query.store(); // Query::preview() simply returns a string with the current query string in it. cout << "Query: " << query.preview() << endl; // .size() gibt die Anzahl der Datensätze aus res aus cout << "Records Found: " << res.size() << endl << endl; */ // The Result class has a read-only Random Access Iterator // Row row; // Neue Reihe initialisieren Barkasse newrow; newrow.set(1,5,5,5,5,"5",5,"5","5"); // Neu angelegte Zeile in Datenbank einfügen query.insert(newrow); cout << "Query : " << query.preview() << endl; // Befehl bestätigen query.execute(); } catch (BadQuery er){ // handle any connection // or query errors that may come up cerr << "Error: " << er.error << endl; return -1; } catch (BadConversion er) { // we still need to cache bad conversions incase something goes // wrong when the data is converted into stock cerr << "Error: Tried to convert \"" << er.data << "\" to a \"" << er.type_name << "\"." << endl; return -1; } return 0; }
und folgende fehlermeldung erhalten:
Query : INSERT INTO Barkasse (index,belegnr,datum_t,datum_m,datum_j,titel,betrag ,kostenstelle,posten) VALUES (1,5,5,5,5,5,5,5,5) Error: You have an error in your SQL syntax near 'index,belegnr,datum_t,datum_m, datum_j,titel,betrag,kostenstelle,posten) VALUES (' at line 1
daraus folg: mysql hat keine ordentliche query überreicht bekommen.
ich schau morgen mal, wie sie aussehen muss.
-
ok.. fehler gebannt.
merke: index ist ein schlüsselwort.
wenn du aus index index1 machst, funzt das ganze.
uff, das war ja ein verdammter fehler
sql_create_9 (barkasse, 1, 9, int, index1, int, belegnr, int, datum_t, int, datum_m, int, datum_j, string, titel, float, betrag, string, kostenstelle, string, posten) int main() { try { // Die Verbindung wird mit dem Befehl Connection hergestellt // Connection(cchar *db, cchar *host="", cchar *user="", cchar *passwd="") Connection con("barkasse"); // This creates a query object that is bound to con. Query query = con.query(); // Neue Reihe initialisieren barkasse newrow; newrow.set(1,5,5,5,5,"'5'",5,"'5'","'5'"); // Neu angelegte Zeile in Datenbank einfügen query.insert(newrow); cout << "Query : " << query.preview() << endl; // Befehl bestätigen query.execute(); } catch (BadQuery er){ // handle any connection // or query errors that may come up cerr << "Error: " << er.error << endl; return -1; } catch (BadConversion er) { // we still need to cache bad conversions incase something goes // wrong when the data is converted into stock cerr << "Error: Tried to convert \"" << er.data << "\" to a \"" << er.type_name << "\"." << endl; return -1; } return 0; }