Datenbankverbindung
-
- Beiträge: 15
- Registriert: 13. August 2012 17:12
Datenbankverbindung
Hallo,
ich habe eine Frage bezüglich Datenbankverbindungen mit QSqlDatabase.
Ich bin mir noch nicht sicher, wie ich diese Verbindung organisiere. Folgedes habe ich mir überlegt.
1. Im Mainwindow dieses Object als public hinterlegen und immer mit MainWindow.db.open() öffnen und Querys ausführen. Da ich aber auch modeless Dialogs verwenden möchte, kann ich das Mainwindow ja nicht als Parent übergeben und so die QSqlDatabase nicht zur Verfügung stellen.
2. An jeden SqlDialog die nötigen Parameter übergeben und jedes mal eine neue QSqlDatabase erstellen. Also für jede Dialogklasse eine private QSqlDatabase anlegen.
3. Eine Klasse erstellen, welche die notwendigen Parameter übergeben bekommt und für die nötigen Statements Memberfunctions hat (also SELECT, UPDATE, usw.)
Ist eine dieser Lösungen sinnvoll oder ist eine ganz andere Idee besser?
Vielen Dank
ich habe eine Frage bezüglich Datenbankverbindungen mit QSqlDatabase.
Ich bin mir noch nicht sicher, wie ich diese Verbindung organisiere. Folgedes habe ich mir überlegt.
1. Im Mainwindow dieses Object als public hinterlegen und immer mit MainWindow.db.open() öffnen und Querys ausführen. Da ich aber auch modeless Dialogs verwenden möchte, kann ich das Mainwindow ja nicht als Parent übergeben und so die QSqlDatabase nicht zur Verfügung stellen.
2. An jeden SqlDialog die nötigen Parameter übergeben und jedes mal eine neue QSqlDatabase erstellen. Also für jede Dialogklasse eine private QSqlDatabase anlegen.
3. Eine Klasse erstellen, welche die notwendigen Parameter übergeben bekommt und für die nötigen Statements Memberfunctions hat (also SELECT, UPDATE, usw.)
Ist eine dieser Lösungen sinnvoll oder ist eine ganz andere Idee besser?
Vielen Dank
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Datenbankverbindung
QSqlDataBase ist darauf ausgelegt, jedes mal per QSqlDatabase::database() die DB-Connection zu öffnen dort wo man sie braucht. Siehe Doku: http://qt-project.org/doc/qt-4.8/qsqlda ... ml#details
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
- Beiträge: 15
- Registriert: 13. August 2012 17:12
Re: Datenbankverbindung
aber wie greif ich dann von modeless dialog auf die QSqlDatabase von dem Mainwindow zu? Die beiden haben ja keine Verbindung miteinander
Re: Datenbankverbindung
Lies doch bitte die Doku und versuch sie zu verstehen. QSqlDatabase speichert für dich die Verbindungen. Wenn du nur eine hast verwende den default-name (also bei addDatabase() und database() keinen connectionName angeben), ansonsten kannst du über den connectionName auch mehrere Datenbankverbindungen halten.
Da QSqlDatabase::database() statisch ist, brauchst du kein Objekt, um die Verbindung(en) zu bekommen.
Da QSqlDatabase::database() statisch ist, brauchst du kein Objekt, um die Verbindung(en) zu bekommen.
-
- Beiträge: 15
- Registriert: 13. August 2012 17:12
Re: Datenbankverbindung
Ok so ganz klar komm ich damit noch nicht ganz. Das mit dem static versteh ich ja aber wie der Zugriff darauf passieren soll nicht. Ich brauch doch zumindest eine Adresse oder so um das Objekt irgendwie zu finden, oder? Könnt ihr mir vielleicht ein kleines Codebeispiel geben?
Etwas wie
Etwas wie
Code: Alles auswählen
//im Konstruktor vom Mainwindow:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("Vanya");
db.setUserName(user);
db.setPassword(pwd);
//irgendwo in einem beliebigen Dialog
QSqlDatabase::database();
QSqlQuery query("SELECT * FROM staff);
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Datenbankverbindung
Solange Du nur die Default-Connection benutzt musst Du dem QSqlQuery keine DB-Verbindung übergeben. Siehe auch hier: http://qt-project.org/doc/qt-4.8/sql-connecting.html
Und wenn Du die DB-Verbindung wirklich übergeben musst dann gibts dafür auch einen ctor von QSqlQuery der Dir das ermöglicht: http://qt-project.org/doc/qt-4.8/qsqlqu ... SqlQuery-3
Und wenn Du die DB-Verbindung wirklich übergeben musst dann gibts dafür auch einen ctor von QSqlQuery der Dir das ermöglicht: http://qt-project.org/doc/qt-4.8/qsqlqu ... SqlQuery-3
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
- Beiträge: 15
- Registriert: 13. August 2012 17:12
SOLVED Datenbankverbindung
Gelesen, versanden, angewand, geteset,funktioniert!
Vielen Dank für die Hilfe und die Geduld
Vielen Dank für die Hilfe und die Geduld
-
- Beiträge: 15
- Registriert: 13. August 2012 17:12
Re: Datenbankverbindung
Hallo,
und schon wieder habe ich ein Problem...
Ich habe einen Updatedialog geschrieben in dem ich Datensätze ändere.
Leider funktioniert dieser Dialog nicht immer. Ich habe ein SQL Script, mit dem ich die Datenbank nach Änderungen wiederherstelle.
Die Datensätze die mit dem Script erstellt wurden lassen sich einwandfrei bearbeiten.
Wenn ich nun über den Insertdialog einen Datensatz oder direkt per SQL Statement im Server erzeuge lässt er sich im Updatedialog nicht ändern.
Ich bin aber als root angemeldet und per SQL Statement im Server funktioniert das Update.
Bei einem anderen Dialog der ebenfals etwas an diesem DS ändert funktioniert aber...
Bei einem Mitentwickler funktioniert genau der Code einwandfrei.
Als RDBMS wird MySQL verwendet.
Kenn jemand das Phänomen?
und schon wieder habe ich ein Problem...
Ich habe einen Updatedialog geschrieben in dem ich Datensätze ändere.
Leider funktioniert dieser Dialog nicht immer. Ich habe ein SQL Script, mit dem ich die Datenbank nach Änderungen wiederherstelle.
Die Datensätze die mit dem Script erstellt wurden lassen sich einwandfrei bearbeiten.
Wenn ich nun über den Insertdialog einen Datensatz oder direkt per SQL Statement im Server erzeuge lässt er sich im Updatedialog nicht ändern.
Ich bin aber als root angemeldet und per SQL Statement im Server funktioniert das Update.
Bei einem anderen Dialog der ebenfals etwas an diesem DS ändert funktioniert aber...
Bei einem Mitentwickler funktioniert genau der Code einwandfrei.
Als RDBMS wird MySQL verwendet.
Kenn jemand das Phänomen?
-
- Beiträge: 15
- Registriert: 13. August 2012 17:12
Re: Datenbankverbindung
Gerade funktioniert es urplötzlich.
Ist das ein Bug?
Ist das ein Bug?
Re: Datenbankverbindung
Wenn das ein von diesem Thread unabhängiges Problem ist, mach bitte einen neuen Thread auf.
Brauchen tun wir auch Code, denn ohne dem wird es schwer eine Lösung zu finden.
Zusätzlich bitte Infos zur Umgebung (Betriebssystem, Qt-Version, usw.)
Brauchen tun wir auch Code, denn ohne dem wird es schwer eine Lösung zu finden.
Zusätzlich bitte Infos zur Umgebung (Betriebssystem, Qt-Version, usw.)