updaten der qsqlite Datenbank und der dazugehörigen QTableView

Alles rund um die Programmierung mit Qt
Antworten
Mogli123
Beiträge: 13
Registriert: 25. September 2018 07:37

updaten der qsqlite Datenbank und der dazugehörigen QTableView

Beitrag von Mogli123 » 20. Februar 2019 14:35

Hi,

Ich habe eine Datenbank erstellt (sqlite) und möchte die Daten mithilfe der QTableView anzeigen.
Die Erstellung der Datenbank sowie das anzeigen funktioniert, wenn ich jedoch die datenbank updaten will funktioniert es nicht mehr.
es werden dann zum teil Inhalte doppelt oder gar nicht angezeigt, ich weiß aber nicht was genau ich anders machen muss
Die Größe der Datenbank soll sich nie ändern es sollen lediglich die Werte angepasst werden.
Ich hoffe das mir jemand helfen kann.
Falls jemand schlechten Code sieht, sagt es bitte.
Ich bin noch ein Anfänger und möchte noch dazulernen wie es richtig und oder besser geht.


erstellen der Datenbank

Code: Alles auswählen

 db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(":memory:");
    if (!db.open())
    {
        QMessageBox::critical(nullptr, QObject::tr("Cannot open database"),
            QObject::tr("Unable to establish a database connection.\n"
                        "This example needs SQLite support. Please read "
                        "the Qt SQL driver documentation for information how "
                        "to build it.\n\n"
                        "Click Cancel to exit."), QMessageBox::Cancel);
        return;
    }

erstellen der Tabelle

Code: Alles auswählen

queryToolChangeWarnings = new QSqlQuery;
    queryToolChangeWarnings->exec("CREATE TABLE ToolChangeWarnings (COLOR varchar(20),"
                "TOOLNR int, TIME int, POCKETSTATUS int)");
    queryToolChangeWarnings->prepare("INSERT INTO ToolChangeWarnings (COLOR, TOOLNR, TIME, POCKETSTATUS) "
                   "VALUES (:COLOR, :TOOLNR, :TIME, :POCKETSTATUS)");
    queryToolChangeWarnings->bindValue(":COLOR", "");

    this->close();

    myTableToolChangeWarnings = new TableToolChangeWarnings(this);
    myTableToolChangeWarnings->move(spaceBetweenTables, spaceBetweenTables);
    myTableToolChangeWarnings->setMinimumHeight(tableHeight);
    myTableToolChangeWarnings->setMinimumWidth(tableWidth);
    myTableToolChangeWarnings->show();


    queryManipulationToolChangeWarnings = new QSqlTableModel(this);
    queryManipulationToolChangeWarnings->setTable("ToolChangeWarnings");
    queryManipulationToolChangeWarnings->select();
    queryManipulationToolChangeWarnings->setEditStrategy(QSqlTableModel::OnFieldChange);

neue Daten für die Datenbank von der tcpSocket Verbindung

Code: Alles auswählen

void detailScreen::receiveVectorTool_W(QVector<int> vector)
{
    if (vector.length() == 30)
    {
        for(qint8 i = 0; i<30; i++)
        {
            arrayToolChangeWarnings[i] = vector[i];
        }
        if (firstFill == false)
        {
    
            firstFillDatabaseToolChangeWarnings();
            emit fillTableNewToolChangeWarnings();
    
            firstFill = true;
        }
        else
        {
            emit fillTableNewToolChangeWarnings();
        }

    }
}


erstes befüllen der Datenbank

Code: Alles auswählen

void detailScreen::firstFillDatabaseToolChangeWarnings()
{
    for (int i = 0; i < 10; i++)
    {
        queryToolChangeWarnings->bindValue(":TOOLNR", arrayToolChangeWarnings[i * 3 + 0]);
        queryToolChangeWarnings->bindValue(":TIME", arrayToolChangeWarnings[i * 3 + 1]);
        queryToolChangeWarnings->bindValue(":POCKETSTATUS", arrayToolChangeWarnings[i * 3 + 2]);
        queryToolChangeWarnings->exec();
    }
}

aktualisieren der Daten

Code: Alles auswählen

void detailScreen::fillDatabaseToolChangeWarnings()
{

    qint8 i = 0;
    for (qint8 indexRow = 0; indexRow < 10; indexRow ++)
    {

        for (qint8 indexColumn = 1; indexColumn < 4; indexColumn ++)
        {
            queryManipulationToolChangeWarnings->setData(queryManipulationToolChangeWarnings->
            index(indexRow,indexColumn), arrayToolChangeWarnings[i]);
            queryManipulationToolChangeWarnings->submit();
            i++;
        }

    }

    emit refreshTableToolChangeWarnings();
}

Aktualisierung der Daten (durch eine Signal & Slot Verbindung) in meiner Tabellenklasse abgeleitet vom QSqlQueryModel

Code: Alles auswählen

void TableToolChangeWarnings::updateTable()
{
    myModelToolChangeWarnings->setQuery("SELECT * FROM ToolChangeWarnings");
};

Wenn jemand mehr Informationen benötigt bitte melden

Vielen Dank im Voraus

Gruß

Antworten