PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QT: statisches sql-objekt



jwebworks
10-05-2003, 20:43
Hallo, Leute,

ich beschäftige mich neuerdings mit Qt und C++.
Um das ganze richtig zu machen lernt man Neues
am besten in der praktischen Anwendung. Ich habe
jetzt schon einiges mit GUI-Elementen herumgespielt
und untereinander zum "agieren" gebracht. :-)

Ich habe ein Hauptfenster in dem in einem
"widgetStack" tausche ich benötigte Unterwidgets
aus. In den verschiedenen UWs möchte ich auf ein
einziges globales QSqlDatabase-Objekt zugreifen.
Eine Verbindung pro Anwendung zur Datenbank
reicht ja wohl :)

Leider habe ich nach einigem Ausprobieren keine Ahnung,
wie das funktionieren soll.

Als erstes habe ich probiert, das Objekt als public
static Attribut in meinem MainWidget einzubinden.
Das hat funktioniert beim kompilieren, aber der
Linker hat mir einen Fehler gemeldet (irgendwas
mit "unresolved reference").

Als nächstes habe ich eine eigenständige Variable
definiert.

Folgende config.h:


#ifndef CONFIG_H
#define CONFIG_H

#define SQL_HOST "localhost"
#define SQL_USER "user"
#define SQL_PASS "pass"
#define SQL_BASE "base"

#include <qsqldatabase.h>

static QSqlDatabase* sqlDatabase;

#endif


in meinem MainWiget wird die Datenbank ganz normal
initialisiert. Sobald ich aber jetzt einen Testaufruf von
einem anderen Widget, das ich in den WidgetStack
geladen habe ausführe, stürzt meine Anwendung mit
einem Speicherzugriffsfehler ab.

Meine Fragen:

Habe ich einen grossen Denkfehler gemacht?
Wie wird das mit dem Datenbankobjekt sonst gelöst?

Ist es falsch, wenn ich das Interface meiner Anwendung
komplett durch ein neues Widget austauschen möchte,
und ich das durch Anlegen und Löschen mit einem WidgetStack
realisiere? Menüzeile und Statuszeile bleiben dabei
bestehen.

Über einige Tips, die meinen Start in die Qt/C++-Welt
erleichtern würden wäre ich dankbar :-) Momentan habe
ich das Buch "Programming with Qt" von "Matthias Kalle
Dalheimer" und die Tutorials der Qt-Doc durchgearbeitet.

Danke sehr ;)

cu, stop.h

anda_skoa
10-05-2003, 21:09
Du könntest das Datenbank Objekt einfach im Hauptfenster anlegen und dann an die Widgets, die es brauche übergeben.
Als Kontruktorparameter oder über eine Methode.



Ist es falsch, wenn ich das Interface meiner Anwendung
komplett durch ein neues Widget austauschen möchte,
und ich das durch Anlegen und Löschen mit einem WidgetStack
realisiere? Menüzeile und Statuszeile bleiben dabei
bestehen.


Wenn du das andere Widget nicht mehr brauchst, kannst du es schon löschen und durch das neue ersetzen.

Ciao,
_

TheDodger
11-05-2003, 18:22
Warum so umständlich?
Unter QT kann man die erste eingerichtet QSqlDatabase als default Database benutzen.
Ist man einmal eingeloggt, steht die Verbindung und man kann ganz normal mit QSqlQuery seine SQL-Statements absetzen.

anda_skoa
11-05-2003, 19:47
Original geschrieben von TheDodger
Warum so umständlich?
Unter QT kann man die erste eingerichtet QSqlDatabase als default Database benutzen.


Das ist natürlich fein, wusste ich nicht.
Wieder mal was gelernt :)

Ciao,
_

jwebworks
12-05-2003, 08:49
HEYYY !!!!
Luxus !

Kümmert sich dann Qt auch darum, ob die Verbindung zur
DB noch steht oder ob sie durch ein Timeout getrennt
wurde?

cu, stop.h

TheDodger
14-05-2003, 15:33
Hmmm, gute Frage :)
Kann ich so gar nicht beantworten.

Was sagt die Doku zu QDataBase dazu?