Seite 1 von 1

QT und mySQl Probleme

Verfasst: 30. November 2006 23:03
von sea_bear
Moin moin!

Ich habe mit Qt und mySQL das Problem, dass ich nicht weiß wie ich einen QsqlCursor sowie ein QsqlQuery so erzeuge, dass ich von allen Funktionen und Dateien in meinem Programm darauf zugreifen und diese auch nutzen kann.

Mein Funktion zum laden der Datenbank sieht wie folgt aus:

Code: Alles auswählen

bool c_dvd_db::connect_database(void)
{
 QSqlDatabase *main_DB = QSqlDatabase::addDatabase( "QMYSQL3" );
 if ( ! main_DB )
 {
  qWarning( "Failed to connect to driver" );
  DatenBank_geladen = FALSE;
  return FALSE;
 }
 main_DB->setDatabaseName(DBName);
 main_DB->setUserName(DBUsername);
 main_DB->setPassword(DBPassword);
 main_DB->setHostName(DBHostname);
 if ( ! main_DB->open() )
 {
  qWarning( "Failed to open Database: " + main_DB->lastError().driverText() );
  qWarning( main_DB->lastError().databaseText() );
  DatenBank_geladen = FALSE;
  return FALSE;
 }
 DatenBank_geladen = TRUE;
 return TRUE;
}
Jetzt habe ich versucht nach der Zeile „DatenBank_geladen = TRUE;“ einen QsqlCursor zu erzeugen.

Code: Alles auswählen

QSqlCursor books_cur( "books" );
Soweit so gut. Leider ist dieser Cursor dann nur in dieser Funktion erreichbar. Versuche ich ihn nun Global zu erzeugen, so bekomme ich immer eine Fehlermeldung, dass ich keinen QsqlCursor erzeugen kann solange noch keine Qapplication vorliegt.
Wie aber erzeuge ich nun den QsqlCursor bzw. ein QsqlQuery so, dass ich es überall in meinem Programm nutzen kann???
Am liebsten würde ich gerne all die Datenbank Operationen und Manipulationen in eine Klasse packen, so dass ich sie dann bei Bedarf ganz einfach aufrufen kann. Z.B. in dieser Form

Code: Alles auswählen

booksDB.setzeFilter(SQL Anweisung);
booksDB.next();
Leider sind alle Beispiele die ich bis jetzt über Google dazu gefunden habe entweder dermaßen kompliziert das ich nicht durchblicke oder aber einfach nicht für mich so umsetzbar.

Ich wäre um jede Hilfe Dankbar.

Tobias

Verfasst: 1. Dezember 2006 09:17
von patrik08
was fuer eine qt version qt4.2 ?

in den unteren code ist sicher alles drinnen was qtsql hergibt..... der driver mysql komt auch wenn er gebuildet ist

Code: Alles auswählen

svn co https://svn.sourceforge.net/svnroot/qtexcel-xslt/_odbc_wizard/    odbcwizard

cd odbcwizard && qmake a.pro && make 

Verfasst: 1. Dezember 2006 10:16
von sea_bear
Nun ja, vielleicht habe ich mich ja falsch ausgedrückt.
Ich kann durchaus auf meine Datenbank zugreifen. Das läuft alles super. Mein Problem ist halt nur, dass ich gerne irgendwo zu Beginn meinens Programms einen QSqlCursor und einen QSqlQuery anlegen würde, welchen ich dann überall in meinem Programm nutzen kann. Das ist eigentlich auch schon alles.
Leider bekomme ich das abere eben nicht hin! :-(

Tobias

PS: ich nutze Qt 3.x

Verfasst: 5. Dezember 2006 00:53
von Spring-Daniel
Du hast da eher eine konzeptionellen Programmierfehler. Was spricht dagegen jedesmal wenn du einen QSqlCursor benötigst denn auch zu erzeugen? Ansonsten solltest Du Dich nochmal intensiv mit Deiner Programmiersprache auseinandersetzen - Konzepte von Globalen und Lokalen Variablen, Strukturierung, etc.

Als ad-hoc Lösung kannst Du ja mal einen globalen Zeiger auf QSqlCursor deklarieren, und dann diesen nach der Verbindung zu Deiner Datenbank zu belegen - Vortan solltest Du über diesen Zeiger global auf Deine Datenbank zugreifen können. (Allerdings, und jetzt werden mich wohl einige mit Mist bewerfen, macht man sowas natürlich nicht - Globale Variablen sollten so weit wie möglich vermieden werden)

Daniel