Seite 1 von 1
[gelöst] SQL und Threads
Verfasst: 30. März 2007 22:08
von Russel-Athletic
Hallo ich habe ein kleines Problem:
Ich habe einen Hauptthread und einen Nebenthread.
Der Hauptthread erzeugt (im Konsturktor) mit
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
db.open();
eine Verbindung
Danach wird der Nebenthread gestartet, der sich mit
QSqlDatabase db=QSqlDatabase::database("");
db.open();
eine weitere Verbindung holt und dann die Tabellen und Daten erzeugt.
Wenn ich allerdings im Hauptthread nachschaue, existiert keine Tablle und keine eingetragenen Dateien.
Re: SQL und Threads
Verfasst: 31. März 2007 11:37
von patrik08
Russel-Athletic hat geschrieben:Hallo ich habe ein kleines Problem:
Ich habe einen Hauptthread und einen Nebenthread.
Der Hauptthread erzeugt (im Konsturktor) mit
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
db.open();
eine Verbindung
Danach wird der Nebenthread gestartet, der sich mit
QSqlDatabase db=QSqlDatabase::database("");
db.open();
eine weitere Verbindung holt und dann die Tabellen und Daten erzeugt.
Wenn ich allerdings im Hauptthread nachschaue, existiert keine Tablle und keine eingetragenen Dateien.
Wenn du mehrere connection zu db machen moechtest dann must du den namen der connection angeben....
Code: Alles auswählen
int connectionsumm = 1;
connectionsumm++;
/* #############db connect 0 ###############################################################################*/
/* select & update ! */
db_0 = QSqlDatabase::addDatabase("QMYSQL",QString("LanConnection_%1").arg(connectionsumm)); /* QMYSQL */
db_0.setHostName(OneVar["dbhost1"]);
db_0.setDatabaseName(OneVar["dbbase1"]);
db_0.setUserName(OneVar["dbuser1"]);
db_0.setPassword(OneVar["dbpass1"]); /* OneVar["LIMITSQL"] */
db_0.open();
connectionsumm++;
/* only sincro && update ! */
db_1 = QSqlDatabase::addDatabase("QMYSQL",QString("WebConnection_%1").arg(connectionsumm)); /* QMYSQL */
db_1.setHostName(OneVar["dbhost2"]);
db_1.setDatabaseName(OneVar["dbbase2"]);
db_1.setUserName(OneVar["dbuser2"]);
db_1.setPassword(OneVar["dbpass2"]); /* OneVar["LIMITSQL"] */
db_1.open();
Verfasst: 31. März 2007 13:16
von Russel-Athletic
Laut der Dokumentation nicht, da sonst immer defaultConnection genommen wird.
Und selbst mit mehreren Namen hab ich es schon ausprobiert.
Was du mir mit dem Code sagen willst, verstehe ich nicht ganz.
Verfasst: 31. März 2007 19:06
von patrik08
Russel-Athletic hat geschrieben:Laut der Dokumentation nicht, da sonst immer defaultConnection genommen wird.
Und selbst mit mehreren Namen hab ich es schon ausprobiert.
Was du mir mit dem Code sagen willst, verstehe ich nicht ganz.
ganz einfach ich verbinde mit 2 db gleichzeitig und die update gehen auf beide und die select wo es am schnellesten geht.... vom intranet ....
wobei ich dann bei jede query die db connection angeben muss.....
Code: Alles auswählen
QSqlQuery query1(db_0);
funo = query1.exec(querzsqlxx);
Danach wird der Nebenthread gestartet, der sich mit
QSqlDatabase db=QSqlDatabase::database("");
db.open();
und wenn du mit dem gleichen damen eine neue connection oeffnest ...
QSqlDatabase db dann loeschst du ja die erste...
Du solltest an die andere class oder thread den ( QSqlDatabase db ) mitgeben... so dass alle class darauf schreiben e lesen koennen...
Verfasst: 1. April 2007 13:16
von Russel-Athletic
Danke, so funktioniert es.