Seite 1 von 1

[gelöst] SQL und Tableview

Verfasst: 27. Juni 2010 12:11
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();

}

...


Re: SQL und Tableview

Verfasst: 27. Juni 2010 12:16
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.

Verfasst: 27. Juni 2010 15:00
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...


:?:

Verfasst: 27. Juni 2010 15:09
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...

Verfasst: 27. Juni 2010 15:47
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 ;)

Verfasst: 11. Juli 2010 16:04
von RogerWilco
genauso ist es...
leider fehlen mir Übung und Überblick...