[gelöst] SQL und Tableview

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
RogerWilco
Beiträge: 61
Registriert: 26. November 2009 00:08
Kontaktdaten:

[gelöst] SQL und Tableview

Beitrag von RogerWilco »

Hallo zusammen,

hier im Forum hatte schon jemand ein ähnliches Problem und den Gültigkeitsbereich einer Variablen übersehen.
Ich wollte das umgehen und habe (erstmal) alles in den Konstruktor gepackt.

Das Verbinden mit der Datenbank funktioniert, ich kann auch hineinschreiben.
Aber das tableview (mit Designer erzeugt) bleibt leer.

Viellcht kann mir jemand sagen, was ich übersehen habe?

Code: Alles auswählen

#include "datenbank.h"
#include "ui_datenbank.h"

Datenbank::Datenbank(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Datenbank)
{
    ui->setupUi(this);
    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("xyz.db");
    db.open();

    QSqlTableModel model;
    model.setTable("test");
    model.select();
    model.setEditStrategy(QSqlTableModel::OnFieldChange);

    ui->tableView->setModel(&model);


    ui->tableView->setWindowTitle("test");
    ui->tableView->show();



    int row = 0;                                                    // in die Datenbank schreiben funktioniert
    model.insertRows(row,1);
    model.setData(model.index(row,0),2);
    model.setData(model.index(row,1),26);
    model.setData(model.index(row,2),"test");
    model.submitAll();

}

...

Zuletzt geändert von RogerWilco am 11. Juli 2010 16:04, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: SQL und Tableview

Beitrag von franzf »

RogerWilco hat geschrieben:hier im Forum hatte schon jemand ein ähnliches Problem und den Gültigkeitsbereich einer Variablen übersehen.
Und das selbe machst du auch :P
Schau dir mal an, wie lange dein QTableModel model; lebt ;)
Bedenke: auch der Konstruktor ist eine "normale" Funktion, die einen eigenen Gültigkeitsbereich hat. Wenn du darin Variablen im automatischen Speicherbereich anlegst, werden diese auch am Ende zerstört.
RogerWilco
Beiträge: 61
Registriert: 26. November 2009 00:08
Kontaktdaten:

Beitrag von RogerWilco »

Danke, Franz.
Ich verstehe das dann jetzt so, dass das QTableModel mit Ende des Konstruktors sein Leben aushaucht.

Offenbar reicht es dann nicht, in der gleichen Funktion

ui->tableView->show();

auszuführen um die Ansicht zu aktualisieren.
Jetzt stehe ich aber auf dem Schlauch...


:?:
RogerWilco
Beiträge: 61
Registriert: 26. November 2009 00:08
Kontaktdaten:

Beitrag von RogerWilco »

ahhh..... das hilft:

QSqlTableModel *model = new QSqlTableModel;
model->setTable("test");
model->select();


Na, ich hatte den Quellcode weitgehend aus einem Buch übernommen.
Jetzt muss ich mir mal Gedanken machen und verstehen, wo der Unterschied zwischen Buch und meinem Fall liegt...
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

RogerWilco hat geschrieben:Jetzt muss ich mir mal Gedanken machen und verstehen, wo der Unterschied zwischen Buch und meinem Fall liegt...
Ich nehme an, im Buch wird das alles direkt in der main() gemacht. Und in der main überlebt eben alles, bis die main vorbei ist, und wenn das passiert, ist dein Programm beendet worden ;)
RogerWilco
Beiträge: 61
Registriert: 26. November 2009 00:08
Kontaktdaten:

Beitrag von RogerWilco »

genauso ist es...
leider fehlen mir Übung und Überblick...
Antworten