Qt4 und SQL - Abfrageprobleme

Alles rund um die Programmierung mit Qt
tYREL
Beiträge: 43
Registriert: 8. Februar 2009 10:11

Qt4 und SQL - Abfrageprobleme

Beitrag von tYREL »

Hallo zusammen,

wollte mich etwas mit Qt und SQL befassen. Hab dazu folgenden Code aus einem Buch etwas gekürzt.

Code: Alles auswählen

#include <QtGui/QApplication>
#include <QtGui>
#include <QtSql>
#include <QDebug>
#include "sqlexample1.h"


/* Modify the following to match your environment */
#define DRIVER       "QSQLITE"  /* see the Qt SQL documentation for a list of available drivers */
#define DATABASE     "cdcol" /* the name of your database */
#define USER         "root"   /* user name with appropriate rights */
#define PASSWORD     ""   /* password for USER */
#define HOST         "localhost" /* host on which the database is running */


int main(int argc, char* argv[]) {
   QApplication app(argc, argv);

   QSqlDatabase db = QSqlDatabase::addDatabase(DRIVER);
   db.setHostName(HOST);
   db.setDatabaseName(DATABASE);
   db.setUserName(USER);
   db.setPassword(PASSWORD);

   if (!db.open()) {
      QSqlError err =  db.lastError ();
      QMessageBox::information(0, QObject::tr("Fehler"), err.text());
      return 1;
   }
   QTextEdit edit;
   QSqlQuery query;

   // Alle Daten abfragen
   query.exec("SELECT * FROM cds");
   QSqlRecord record = query.record();
   while (query.next()) {
      QString  line =
         query.value(record.indexOf("titel")).toString();
         line.append(QObject::tr(", "));
         edit.append(line);
   }
  edit.show();
  return app.exec();
}
Die Verbindung zur Datenbank klappt wunderbar. Es handelt sich hierbei um die Beispiele aus XAMPP. In der Datentabelle sind 3 Datensätze. QSqlRecord liefert allerdings nichts zurück. Kann mir da jemand helfen?

Danke+Grüße
tYREL
guenni81
Beiträge: 134
Registriert: 29. Juli 2006 02:22

Beitrag von guenni81 »

Schreib mal dein

Code: Alles auswählen

QSqlRecord record = query.record(); 
in die while schleife.
mfg
Günni
tYREL
Beiträge: 43
Registriert: 8. Februar 2009 10:11

Beitrag von tYREL »

ändert leider nichts. es wird immer noch nichts angezeigt. :?
guenni81
Beiträge: 134
Registriert: 29. Juli 2006 02:22

Beitrag von guenni81 »

Ja, war auch nicht wirklich verkehrt, sorry mein Fehler.
Prüfe mal ob es das Feld titel in der DB wirklich gibt oder ob dies eventuell anderster lautet. Alternativ würde ich auch einfach mal die Nummer selbst per Hand in der Value Funktion eintragen.
mfg
Günni
tYREL
Beiträge: 43
Registriert: 8. Februar 2009 10:11

Beitrag von tYREL »

feldnamen stimmen, tabellen und datenbanknamen habe ich ebenfalls mehrmals geprüft.

du meinst zum beispiel so:

Code: Alles auswählen

		QString line = query.value(1).toString();
hat auch nicht geholfen :cry:
tYREL
Beiträge: 43
Registriert: 8. Februar 2009 10:11

Beitrag von tYREL »

kann es evtl daran liegen:

Code: Alles auswählen

db.setHostName(HOST);
wenn ich nämlich anstelle von "localhost", "" schreibe, dann klappt die verbindung mit open() trotzdem, aber angezeigt wird auch nichts. muß ich da evtl. was anders machen?
guenni81
Beiträge: 134
Registriert: 29. Juli 2006 02:22

Beitrag von guenni81 »

Wird die richtige DB geöffnet?
Gibt mal den kompletten Pfad + Dateiname zur Datenbank in der Funktion setDatabaseName an. Da es sich hier um eine Sqlite Datenbank handelt spielt der hostname meines wissens keine wirkliche Rolle.
mfg
Günni
tYREL
Beiträge: 43
Registriert: 8. Februar 2009 10:11

Beitrag von tYREL »

Ob die richtige Datenbank geöffnet wird kann ich nicht sagen. Über QSqlDatabase::databaseName bekommt man ja den Namen zurück. Der wäre korrekt.

Das mit dem Pfad und Namen verstehe ich nicht ganz. Soll ich da den Filesystem Pfad eintragen. Wenn ja, dann bekomme ich einen Fehler, dass Qt die Datenbank nicht finden kann.
guenni81
Beiträge: 134
Registriert: 29. Juli 2006 02:22

Beitrag von guenni81 »

Ja, trag mal den kompletten Pfad zur DB mit ein.
Bspl. c:\irgendwas\datenbank.db
Allerdings bin ich mir nicht ganz sicher ob du bei Windows ein \\ machen mußt.
mfg
Günni
tYREL
Beiträge: 43
Registriert: 8. Februar 2009 10:11

Beitrag von tYREL »

gleiches ergebnis. open() liefert zwar keinen fehler zurück, aber angezeigt wird nix. ich denke, da klappt irgendwas nicht. möglicherweise liegt es auch an meiner xampp installation, die sich nicht verträgt mit der VS SQL Express installtion. Ich versuche mal eher den MS SQL Express Server zu verbinden. Vielleicht klappt ja das. Vielen Dank für Deine Hilfe. :D
guenni81
Beiträge: 134
Registriert: 29. Juli 2006 02:22

Beitrag von guenni81 »

Kann das sein das du auf die MySQL DB zugreifen willst und die Daten dort vorhanden sind? Für Sqlite brauchst du nämlich keine XAMPP installation. Momentan greifst du ja auf ne Sqlite DB zu.
Jetzt bin ich ein wenig verwirrt.
mfg
Günni
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

QSQLITE erwartet allein ein "setDatabaseName()", welchem du den Dateinamen (!) des db-file gibst. Deine Applikation muss dieses file nur finden.
setHostName usw. sind wirkungs- und nutzlos bei SQLITE, da du da keinen server hast, sondern wie gesagt nur ein db-file.

Ein "define" find ich nicht so gut, da es jedes Vorkommen von "DATABASE" durch "cdcol" ersetzt.
Wenn du das wirklich oben stehen haben willst, ist es besser da nen "static const QString DATABASE("cdcol");" hinzusetzen.
tYREL
Beiträge: 43
Registriert: 8. Februar 2009 10:11

Beitrag von tYREL »

ich bin auch schon den ganzen tag verwirrt :D . ich weis nämlich nicht genau was ich tue. ich versuch mal zu erklären was ich tun wollte.

als ich habe auf meinem arbeitsrechner Visual C++ laufen + SQL Server Express. Der Dienst läuft auch.

Dann habe ich in besagtem Buch (wo der Code her ist) gelesen, dass der Author für seine Anwendungen eine XAMPP installation empfiehlt. Also dachte ich mir warum net, installiere ich das halt. Und seither komme ich einfach nicht weiter. Ach ja und das ganze ist virtuallisiert. Sprich die ganze IDE und XAMPP läuft auf VMWare (WinXP SP2).

Ich vermute auch ganz stark, dass hier irgendwo der Fehler liegt. Ich wer heute abend nochmal ein bisschen suchen... :wink:
guenni81
Beiträge: 134
Registriert: 29. Juli 2006 02:22

Beitrag von guenni81 »

Die Virtualisierung sollte eigentlich nix ausmachen...
mfg
Günni
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Dein VM wird doch sicherlich eine IP haben, oder? Kannst aus der VM heraus diese auch mit loalhost ansprechen?
XAMPP hat nen MySQL-Server. Für ne reine DB ist XAMPP aber voll oversized, das startet weils wurscht ist gleich noch nen Apache, auf dem ein PHP läuft... Brauchst du doch nicht ;)

Für bissi SQL spielen reicht ein SQLITE vollkommen! Einfach Filename angeben, fertig! Ansonsten bracuhst du eindeutig nen anderen SQL-Driver ;) (QMYSQL oder so) Dann sollte das aber funktionieren!
Wenn dein Buch einen XAMPP empfiehlt muss auch drinnen stehen wie du Qt dazu bewegst sich auf den zu connecten! Ansonsten

Code: Alles auswählen

Buch
     \
      |
      |    /
      |   /
         /
   |     |
   |  T  |
   |  O  |
   |  N  |
   |  N  |
   |  E  |
   |_____|
oder so :P
Antworten