Seite 1 von 1

Kann nicht DB im Thread abfragen

Verfasst: 22. Juli 2011 14:34
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();
}

Re: Kann nicht DB im Thread abfragen

Verfasst: 22. Juli 2011 14:45
von Christian81
Und wo öffnest Du die DB-Connection "thread1" ?
Und was ist mit "query erstellen" gemeint??

Re: Kann nicht DB im Thread abfragen

Verfasst: 22. Juli 2011 15:05
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");

Re: Kann nicht DB im Thread abfragen

Verfasst: 22. Juli 2011 16:27
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...