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ß