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 tutorial

    4.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.html

    was 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;
    }
    

Anmelden zum Antworten