SQlite gibt nicht alle Datensätze aus



  • Abend,
    Ich arbeite gerade an einem tool das 5 einträge in eine sql DB schreibt und sie anschließen wieder ausgiebt, ich habe folgenden code(SQLite wiki):

    #include <iostream>
    #include <conio.h>
    #include <sqlite3.h>
    using namespace std;
    
    int main() {
    sqlite3 *database = 0;
    sqlite3_open("database.db",&database);
    sqlite3_exec(database,"INSERT INTO bots(id,ip) VALUES ('0','127.0.0.1')",0,0,0);
    sqlite3_exec(database,"INSERT INTO bots(id,ip) VALUES ('1','127.0.0.2')",0,0,0);
    sqlite3_exec(database,"INSERT INTO bots(id,ip) VALUES ('2','127.0.0.3')",0,0,0);
    sqlite3_exec(database,"INSERT INTO bots(id,ip) VALUES ('3','127.0.0.4')",0,0,0);
    sqlite3_exec(database,"INSERT INTO bots(id,ip) VALUES ('4','127.0.0.5')",0,0,0);
    
    char **result = 0;
    int num_rows = 0, num_cols = 0;
    sqlite3_get_table(database,"SELECT id,ip FROM bots",&result,&num_rows,&num_cols,0);
    for(int row = 2;row <= num_rows;++row) {
    std::cout << result[ row ] << std::endl;
    }
    sqlite3_free_table(result);
    
    sqlite3_close(database);
    getch();
    return 0;
    }
    

    Das Problem ist das er aber nur das ausgibt:

    0
    127.0.0.1
    1
    127.0.0.2

    Habe ich da irgendwas mit den querys falsch gemacht?



  • Deine Schleife ist falsch, ich habs mal bissle geändert, so gehts
    zumindest bei mir:

    char **result = 0;
    
       int zahlZeilen;
       int zahlSpalten;
    
       sqlite3_get_table(Database, read->Text.c_str(), &result, &zahlZeilen, &zahlSpalten, 0);
    
       String s;
    
       for(int zeile=0; zeile<(zahlZeilen*zahlSpalten)+1; zeile=zeile+zahlSpalten)
       {
          s = "";
          for(int spalte=0; spalte<zahlSpalten; spalte++)
          {
             s = s + "|";
    	 s = s + result[zeile+spalte];
    	 s = s + "|";
          }
       }
    sqlite3_free_table(result);
    

    Ich schreib die Ergebnisse halt in nen String aber ansonsten ist es gleich.



  • achja, zur Begründung:

    Du hast ja nicht nur einen Eintrag pro Zeile sondern mehrere,
    in deinem Fall zwei.
    Es reicht also nicht bis zur max Anzahl der Zeilen zu laufen.

    Meine Lösung war jetzt Zeilen * Spalten + 1.
    Warum die +1 kann ich dir ehrlich gesagt nicht sagen ich hab
    nur gemerkt das er immer eine Zeile zu wenig ausgibt und die dann
    halt noch eingefügt aber vlt kann da ja jmd anderes was zu sagen?

    BTW: hier kann man das gut sehen:
    http://www.sqlite.org/c3ref/free_table.html


Anmelden zum Antworten