Kann nicht DB im Thread abfragen

Alles rund um die Programmierung mit Qt
Antworten
sooofunky
Beiträge: 31
Registriert: 4. Mai 2011 11:48

Kann nicht DB im Thread abfragen

Beitrag von sooofunky »

Hallo,

den Datenbank Name, Benutzer, Passwort habe ich vorher gesetzt und möchte jetzt in 3-4 Threads Abfragen tätigen. Im Beispiel unten ist der Connection Name "thread1". Wenn ich jetzt den Thread starte kann ich zwar die db öffnen aber nicht query erstellen. Ich weiss, dass jeder Thread eine eigene Verbindung braucht und Connection Name. Ich bitte um Hilfe.

Code: Alles auswählen

 void RenderThread::run()
 {
    QSqlDatabase db = QSqlDatabase::database("thread1");
// QSqlDatabase db = QSqlDatabase::cloneDatabase(QSqlDatabase::database("QMYSQL", "thread1"), "thread2");

    if (db.open())
    {
          QSqlQuery query(db);
          query.prepare(m_str);

          if(query.exec() && query.first())
          {
                 while (query.next())
	  {
                        qDebug() << query.value(0).toDateTime().toString();
                 }
           }
           query.finish();
       }
       db.close();
}
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Kann nicht DB im Thread abfragen

Beitrag von Christian81 »

Und wo öffnest Du die DB-Connection "thread1" ?
Und was ist mit "query erstellen" gemeint??
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
sooofunky
Beiträge: 31
Registriert: 4. Mai 2011 11:48

Re: Kann nicht DB im Thread abfragen

Beitrag von sooofunky »

mit "query erstellen" habe ich "QSqlQuery query(db)" gemeint - edit: eigentlich das query.exec()

db wird im Haupthread konfiguriert. Öffnen tue ich sie nicht.

Code: Alles auswählen

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "thread1");
db.setHostName("127.0.0.1");
db.setDatabaseName("myDB");
db.setUserName("user1");
db.setPassword("1234");
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: Kann nicht DB im Thread abfragen

Beitrag von solarix »

Naja.. also in der Doku steht nicht "öffnen", sondern "created":
http://doc.qt.nokia.com/latest/threads-modules.html#threads-and-the-sql-module hat geschrieben: Threads and the SQL Module
A connection can only be used from within the thread that created it. Moving connections between threads or creating queries from a different thread is not supported.
Ich gehe davon aus, dass genau das

Code: Alles auswählen

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "thread1");
damit gemeint ist...
Antworten