Nutzung von 2 Datenbanken
Nutzung von 2 Datenbanken
Hallo Leute,
ich möchte in meinem Programm 2 verschiedene Datenbanken nutzen. Da habe ich in einem Buch gelesen, daß man beim erzeugen der Verbindung als zweites Argument einen Namen vergeben kann, den man später einem Zeiger zuordnet. Ich habe daß wie folgt probiert, bekomme aber immer den Fehler "QSqlDatabase mySqlDB = QSqlDatabase::database("sql");"
Hier ist der Quellcode den ich habe:
void dataCall::connectMYSQLDB()
{
QSqlDatabase mySqlDB = QSqlDatabase::addDatabase("QMYSQL",
"sql");
QSqlDatabase mySqlDB = QSqlDatabase::database("sql");
mySqlDB.setHostName(host);
mySqlDB.setDatabaseName(database);
mySqlDB.setUserName(username);
mySqlDB.setPassword(dbpasswd);
if (mySqlDB.open())
{
QMessageBox::information(0,(""),"Die Verbindung zur SQL-Datenbank wurde hergestellt");
}
else
{
QMessageBox::information(0,(""),"Die Verbindung zur SQL-Datenbank konnte nicht hergestellt werden");
}
}
Vielleicht kann mir jemand sagen was ich falsch mache.
Danke
yellow1
ich möchte in meinem Programm 2 verschiedene Datenbanken nutzen. Da habe ich in einem Buch gelesen, daß man beim erzeugen der Verbindung als zweites Argument einen Namen vergeben kann, den man später einem Zeiger zuordnet. Ich habe daß wie folgt probiert, bekomme aber immer den Fehler "QSqlDatabase mySqlDB = QSqlDatabase::database("sql");"
Hier ist der Quellcode den ich habe:
void dataCall::connectMYSQLDB()
{
QSqlDatabase mySqlDB = QSqlDatabase::addDatabase("QMYSQL",
"sql");
QSqlDatabase mySqlDB = QSqlDatabase::database("sql");
mySqlDB.setHostName(host);
mySqlDB.setDatabaseName(database);
mySqlDB.setUserName(username);
mySqlDB.setPassword(dbpasswd);
if (mySqlDB.open())
{
QMessageBox::information(0,(""),"Die Verbindung zur SQL-Datenbank wurde hergestellt");
}
else
{
QMessageBox::information(0,(""),"Die Verbindung zur SQL-Datenbank konnte nicht hergestellt werden");
}
}
Vielleicht kann mir jemand sagen was ich falsch mache.
Danke
yellow1
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Nutzung von 2 Datenbanken
Du solltest mal C(++) lernen - wie soll das funktionieren?yellow1 hat geschrieben: Vielleicht kann mir jemand sagen was ich falsch mache.
Man kann keine 2 Variablen mit gleichen Namen innerhalb einer Funktion benutzen... des Weiteren sind beide Connections nach dem Beenden Deiner Funktion wieder weg.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Hi Christian,
ich rufe die Funktionen beim erstellen meiner Klasse auf und somit sind sie, mindestens so lange wie die Klasse besteht, vorhanden. Daß habe ich schon richtig gemacht und die Verbindung zur Datenbank bleibt bestehen.
Meine Frage ist halt nur wie ich den Quellcode richtig schreibe, damit ich 2 verschiedene Datenbanken( MySql & Access ) verwenden kann. Diese Zeilen , stehen so in dem Buch "C++ GUI Programmierung mit QT4" von Addison-Wessley. Daß ist aber ja anscheinend ein Druckfehler.
MFG
yellow1
ich rufe die Funktionen beim erstellen meiner Klasse auf und somit sind sie, mindestens so lange wie die Klasse besteht, vorhanden. Daß habe ich schon richtig gemacht und die Verbindung zur Datenbank bleibt bestehen.
Meine Frage ist halt nur wie ich den Quellcode richtig schreibe, damit ich 2 verschiedene Datenbanken( MySql & Access ) verwenden kann. Diese Zeilen , stehen so in dem Buch "C++ GUI Programmierung mit QT4" von Addison-Wessley. Daß ist aber ja anscheinend ein Druckfehler.
MFG
yellow1
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Falschyellow1 hat geschrieben:Hi Christian,
ich rufe die Funktionen beim erstellen meiner Klasse auf und somit sind sie, mindestens so lange wie die Klasse besteht, vorhanden.
Selbst wenn sie dort so stehen würden, dann wohl nicht in diesem Kontext. Nochmal: Es ist nicht möglich, 2 Variablen in einer Funktion den gleichen Namen zu geben.Meine Frage ist halt nur wie ich den Quellcode richtig schreibe, damit ich 2 verschiedene Datenbanken( MySql & Access ) verwenden kann. Diese Zeilen , stehen so in dem Buch "C++ GUI Programmierung mit QT4" von Addison-Wessley. Daß ist aber ja anscheinend ein Druckfehler.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Yellow hat zwar scheinbar das Wesen des Stacks noch nicht so ganz erkannt und macht folglich falsche Überlegungen, das Resultat ist aber wie ich meine hier zufällig richtig, denn die Zerstörung von mySqlDB bedeutet ja nicht das die Verbindung weg ist. QSqlDatabase ist nur als eine Art Zeiger oder Handle zu verstehen, das man sich jeder Zeit mit der statischen Funktion QSqlDatabase::database(...) wiederbeschaffen kann.yellow1 hat Folgendes geschrieben:
Hi Christian,
ich rufe die Funktionen beim erstellen meiner Klasse auf und somit sind sie, mindestens so lange wie die Klasse besteht, vorhanden.
Falsch
So wie ich das sehe ist zunächst mal die Zeile
Code: Alles auswählen
QSqlDatabase mySqlDB = QSqlDatabase::database("sql");Meine Frage ist halt nur wie ich den Quellcode richtig schreibe, damit ich 2 verschiedene Datenbanken( MySql & Access ) verwenden kann
Code: Alles auswählen
void dataCall::connectMYSQLDB()
{
QSqlDatabase mySqlDB = QSqlDatabase::addDatabase("QMYSQL","sql");
mySqlDB.setHostName(sqlhost);
mySqlDB.setUserName(sqlusername);
mySqlDB.setPassword(sqldbpasswd);
mySqlDB = QSqlDatabase::addDatabase("QODBC","access");
mySqlDB.setHostName(accesshost);
mySqlDB.setUserName(accessusername);
mySqlDB.setPassword(accessdbpasswd);
QSqlDatabase::database("sql").open();
QSqlDatabase::database("access").open();
}-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Aua - wie kann man nur sowas zulassen... das bringt ja einen Qt-Anfänger noch mehr durcheinander -> Warum kann ich mit QWidget meinWidget = QWidget("Test") nicht das QWidget ansprechen welches ich im ctor erstellt habe?Tarek hat geschrieben:Yellow hat zwar scheinbar das Wesen des Stacks noch nicht so ganz erkannt und macht folglich falsche Überlegungen, das Resultat ist aber wie ich meine hier zufällig richtig, denn die Zerstörung von mySqlDB bedeutet ja nicht das die Verbindung weg ist. QSqlDatabase ist nur als eine Art Zeiger oder Handle zu verstehen, das man sich jeder Zeit mit der statischen Funktion QSqlDatabase::database(...) wiederbeschaffen kann.
Nunja, ist eh zu spät sobald ich beim connect einen anderen Namen benutze und es an einer Stelle bei QSqlDatabase::database(...) vergesse zu ändern
*wunderüberQSqlDatabase*
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Naja, abgesehen was ich ja laut Christian alles falsch gemacht habe, bedanke ich mich erstmal bei Tarek, der es wenigstens versucht mir zu helfen.
Doch leider ist mein Problem damit noch immer nicht gelöst.
Die Frage ist nun, wie ich dann im Bedarfsfall die jeweilige Datenbank meinem da erzeugtem QSqlQuery zuweise, damit ich die richtigen Tabellen auslesen kann ?
Und ist es überhaupt möglich die Verbindung in der einen Funktion zu erzeugen und dann später in einer seperaten Funktion die dazugehörigen Querys?
Danke
yellow1
Doch leider ist mein Problem damit noch immer nicht gelöst.
Die Frage ist nun, wie ich dann im Bedarfsfall die jeweilige Datenbank meinem da erzeugtem QSqlQuery zuweise, damit ich die richtigen Tabellen auslesen kann ?
Und ist es überhaupt möglich die Verbindung in der einen Funktion zu erzeugen und dann später in einer seperaten Funktion die dazugehörigen Querys?
Danke
yellow1
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
In dem Du dem QSqlQuery im Konstruktor mitteilst, welche Datenbank verwendet werden soll:Die Frage ist nun, wie ich dann im Bedarfsfall die jeweilige Datenbank meinem da erzeugtem QSqlQuery zuweise, damit ich die richtigen Tabellen auslesen kann ?
Code: Alles auswählen
QSqlQuery::QSqlQuery ( const QString & query = QString(), QSqlDatabase db = QSqlDatabase() )