[gelöst] SQL und Threads

Alles rund um die Programmierung mit Qt
Antworten
Russel-Athletic
Beiträge: 3
Registriert: 30. März 2007 19:50

[gelöst] SQL und Threads

Beitrag 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.
Zuletzt geändert von Russel-Athletic am 1. April 2007 13:16, insgesamt 1-mal geändert.
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Re: SQL und Threads

Beitrag 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();



.........................
speack português italiano deutsch english castellà qt
Russel-Athletic
Beiträge: 3
Registriert: 30. März 2007 19:50

Beitrag 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.
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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...
.........................
speack português italiano deutsch english castellà qt
Russel-Athletic
Beiträge: 3
Registriert: 30. März 2007 19:50

Beitrag von Russel-Athletic »

Danke, so funktioniert es.
Antworten