Daten aus SQLite3 in QT ausgeben



  • Guten Tag zusammen
    Ich bin neu im C++, habe bisher mehr VBA, Python, PHP etc. programmiert.
    Jetzt bin ich bei meiner ersten C++Anwendung.
    Ich habe es schon geschafft, eine SQLite3-Datenbank anzusprechen und einen SQL-Befehl dahin zu schicken.
    Leider weiss ich jetzt nicht, wie ich die Daten in meine QT-Maske bekomme.
    Die Callback-Funktion kann ich nicht so modifizieren, dass sie mir die Werte in die Felder schreibt.

    int callback(void *data, int argc, char **argv, char **azColName){
       int i;
       fprintf(stderr, "%s: ", (const char*)data);
       for(i=0; i<argc; i++){
           printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
       }
       printf("\n");
       // An dieser Stelle würde ich gerne Werte in die MainWindow Felder schreiben
       // z.B:
       // ui->i_hersteller->setText(argv[0])
       return 0;
    }
    

    Kann mir jemand helfen?

    Danke im Voraus

    Thomas



  • was ist das für eine Callbackfunktion?
    Benutzt du das Qt Datenbankplugin?



  • Deine Callback Funktion kennt dein ui Objekt nicht.

    Ich würde darauf Tippen, dass du auf deine ui von dem Ort zugreifen kannst, von dem du den Callback "aufrufst". Da sollten deine Daten in dem void Pointer stehen und du kannst die Daten in deiner gui anzeigen lassen. Aber in deinem Sqlite3 Callback hat meiner Meinung nach auch ein UI Zugriff nichts zu suchen.



  • @manni86
    Die callbackfunktion kommt aus dem Ausdruck:

    rc = sqlite3_exec(db, sql_daten, callback, (void*)data, &zErrMsg);
    

    Das QT Datenbankplugin? Ich denke das kenne ich noch nicht.

    @Schlangenmensch
    Ich denke auch, dass das der falsche Ort ist.
    Wie kann ich denn nach dem o.g. Aufruf die Daten weiter verarbeiten? Wo stehen die Daten nach dem Befehl?

    Thomas



  • Schau dir das Beispiel für das Plugin an: https://katecpp.wordpress.com/2015/08/28/sqlite-with-qt/

    Das ist ein typischer C-Callback: du schmeist beim Aufruf die Adresse einer Struktur als void* rein und bekommst sie im Callback wieder übergeben. Dort musst du wieder auf die Struktur casten. Was ist denn bei dir data? Das sollte eine Struktur sein, in die du deine Werte steckst oder auch dein ui.



  • Die Daten stehen nach dem sqlite_exec in data. Das Interface von Sqlite ist C-Typisch. Wenn QT ein schönes C++ Interface hat, nutz das.

    Die exec Funktion führt auch nur eine Schleife mit einer "step()" Funktion aus. Wenn man das von Hand macht kommt man um den void* mit entsprechenden Casts drum herum.


Anmelden zum Antworten