Seite 1 von 1
Datenbankverbindung
Verfasst: 15. August 2012 22:36
von schoettner
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
Re: Datenbankverbindung
Verfasst: 16. August 2012 06:25
von Christian81
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
Re: Datenbankverbindung
Verfasst: 16. August 2012 15:21
von schoettner
aber wie greif ich dann von modeless dialog auf die QSqlDatabase von dem Mainwindow zu? Die beiden haben ja keine Verbindung miteinander
Re: Datenbankverbindung
Verfasst: 16. August 2012 15:41
von franzf
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.
Re: Datenbankverbindung
Verfasst: 16. August 2012 16:51
von schoettner
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
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);
Re: Datenbankverbindung
Verfasst: 16. August 2012 17:40
von Christian81
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
SOLVED Datenbankverbindung
Verfasst: 16. August 2012 20:59
von schoettner
Gelesen, versanden, angewand, geteset,funktioniert!
Vielen Dank für die Hilfe und die Geduld
Re: Datenbankverbindung
Verfasst: 20. August 2012 00:32
von schoettner
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?
Re: Datenbankverbindung
Verfasst: 20. August 2012 01:39
von schoettner
Gerade funktioniert es urplötzlich.
Ist das ein Bug?
Re: Datenbankverbindung
Verfasst: 20. August 2012 06:43
von franzf
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.)