Problem bei QT-Version >5.7 mit QSqlDatabase

Alles rund um die Programmierung mit Qt
Antworten
RobRoy1304
Beiträge: 47
Registriert: 9. Juli 2009 10:56

Problem bei QT-Version >5.7 mit QSqlDatabase

Beitrag von RobRoy1304 »

Hallo Gemeinde,

mir wurde von einem Benutzer meines Projektes, eine Lagerverwaltung (opensource) https://sites.google.com/site/robertewert/,
nach dem er ein Update seiner Linux-Dispo durchführte, Probleme mit meinem Programm bezüglichder der Datenbankverbindung gemeldet.

Konkret geht es um eine SQLite 3-Datenbank und QSqlDatabase. Ich habe eine Zeit lang nicht an dem Projekt gearbeitet und meine letzten Arbeiten
am Projekt liefen mit Version von Qt 5.7 auch tadellos. Ich bin dem nachgegangen und habe feststellen müssen, das neuere Versionen von QT
die Fehlermeldungen:

Code: Alles auswählen

QSqlDatabasePrivate::database: requested database does not belong to the calling thread.
QSqlQuery::prepare: database not open
12:37:07: C:\Users\rober\Desktop\progge
produzieren. (getestet mit Windows 10 (64-Bit) / QtCreator / QT 5.9 (64.Bit))

Zum Aufbau des Programmes:

Code: Alles auswählen

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    virtual void closeEvent(QCloseEvent *event);

private:
    Ui::MainWindow *ui;
public:
    int m_iTimerId;
    CWorkThread m_thread;//work thread
    CDbConnection m_db;//database interface//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Code: Alles auswählen

class CDbConnection
{
private:
    [b]QSqlDatabase m_db;//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!![/b]
Im Mainwindow gibt es eine Instranz von CDbInterface, in dieses gibt es eine Instanz von QSqlDatabase. Der Code für alle Datenbankzugriffe
befindet sich in der Klasse CDbInterface. Sämtliche Eingabefenster und auch der Workthread haben Zugriff auf die Intanz von CDbInterface
im Mainwindow mittels eines Zeigers.

Der Quellcode ist auf meiner homepage verfügbar, Version 0.34_4. Hat jemand eine Idee für eine Lösung meines Problemes, danke.
Liebe Grüße Robert
Antworten