Datenbank Sqlite
-
Hallo Zusammen
Ich versuche eine Verbindung zu SQlite Datenbank zu erstellen. Leider bekomme ich ein paar Fehlermeldungen.Ohne #include <QtSql/QSQLiteDriver> ca. 49 Meldungen.
Fehler:undefined reference to `_imp___ZN12QSqlDatabase17defaultConnectionE'
usw.Jetzt nur noch 4 Meldungen
Fehler:QtSql/private/qsqlcachedresult_p.h: No such file or directory
Fehler:expected class-name before '{' token
Fehler:'QSqlCachedResult' has not been declared
Fehler:expected ',' or '...' before '&' tokenWas könnte das sein?
Im "qsql_sqlite.h" habe ich ja nichts geändert. Dürfte doch keine Fehlermeldung auftreten.#include "mainwindow.h" #include "ui_mainwindow.h" #include <QMessageBox> #include <QtSql/QSQLiteDriver> #include <QtSql/QSqlDatabase> #include <QtSql/QSqlQuery> #include <QtSql/QSqlQueryModel> #include <QtSql/QSqlTableModel> #include <QDebug> #include <QtCore/QCoreApplication> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QSqlDatabase db=QSqlDatabase::addDatabase("SQLITE"); db.setDatabaseName("C:/Zeiterfassung/Zeiterfassung_2.sqlite"); db.open(); QSqlQuery query; if(db.isOpen()) //Wenn DB geöffnet wurde { if(query.exec(QString("SELECT * FROM user"))) { // if(query.next())//Auswählen // { // //QDebug() << query.value(0).toString(); // //QDebug() << query.value(1).toString(); // } QSqlTableModel *Modul=new QSqlTableModel(this); Modul->setTable("user"); Modul->select(); ui->tableView->setModel(Modul); } } else { //Erster Start auf diesem computer --> Meldung } db.close(); QSqlDatabase::removeDatabase("QSQLITE"); }
-
Steht in deiner .pro auch QT += sql drinnen?
Den include von QSQLiteDriver nimmst du wieder raus. Das ist ein Plugin und wird zur Laufzeit dynamisch geladen (ohne include, linken, o.Ä.)
-
Jetzt sind die Fehlermeldung weg aber die Daten werden noch nicht angezeigt.
Ich vermute die Datenbank ist noch nicht geöffnet. Pfad zur Datei ist richtig.
-
Probiers mal mit "C:\\Zeiterfassung\\Zeiterfassung_2.sqlite" als Pfad.
-
arghonaut schrieb:
Probiers mal mit "C:\\Zeiterfassung\\Zeiterfassung_2.sqlite" als Pfad.
Habe ich auch schon probiert. Geht leider nicht.
-
Ich habe den Fehler gefunden.
QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE"); //nicht SQLITE
-
addDatabase() will schon nen ordentlichen DriverName haben: "SQLITE" sollte "QSQLITE" heißen. Das ist der DriverName und nicht der ConnectionName (weshalb ein removeDatabase("QSQLITE") scheitern wird). An der Stelle aber zu versuchen, die Datenbankverbindung zu entfernen ist böse, da das QSqlTableModel die noch braucht. Lies dir auch die dicke Warnung zu QSqlDatabase::removeDatabase() durch.
-
Hallo
Ich hab noch ein kleineres Problem und zwar geht es um den QSqlTableMode.
Wenn ich die Daten Abrufe ist mein Zeitangabe noch nicht richtig Formatiert ( 2011-12-29 20:11:47 ).
Gibts eine Möglichkeit das Format richtig einzustellen?
Mit Sql könnte ich das Datum richtig abrufen nur habe ich keine Ahnung wie das mit dem QSqlTabelMode geht?Sql
SELECT strftime('%Y',StartZeit) as 'Datum', strftime('%m',StartZeit) as 'Monat', strftime('%H:%M:%S',StartZeit) as 'Zeit', Stempelzeit.User_id as 'StempelNr' FROM Stempelzeit where Datum='2011' and Monat= '10' and StempelNr=1
all_model->setTable("Stempelzeit"); all_model->setFilter("strftime('%Y-%m-%d',StartZeit) = '2011-12-29' and User_id='5'"); all_model->select(); ui->tableView->setModel(all_model);
-
Wie sieht den die "falsche" Formatierung bei dir gerade aus?
-
phcn.fraggle schrieb:
Wie sieht den die "falsche" Formatierung bei dir gerade aus?
Hallo
Im Moment sieht's so aus:
StartZeit
2011-12-29 20:11:47Ziel sollte getrennt sein:
Datum Monat Zeit
29.12.2011 12 20:11:47
-
Hmm also die einfache Variante wäre natürlich wenn du dir direkt die Spalten in deiner Datenbanktabelle so anlegst, das wird dann auch automatisch in der View so abgebildet ( danach musst du dich nur noch um das Filtern der Einträge kümmern )
Ich vermute mal du hast nur eine Spalte in deiner Tabelle in der du nur deine Zeitstempeldaten ablegst ( Deswegen bringt er dir auch nur diese eine Spalte )
Du kannst aber auch mal folgendes ausprobieren:
Da die QSqlTableModel Klasse von der QSqlQueryModel Klasse abgeleitet wird, kannst du ja mal versuchen deine komplette SQL-Query direkt als String über die Methode setQuery() abzuschicken. Ich meine das es so funktionieren müsste, die Spalten die dann durch die Aliasse entstehen sollten erkannt und abgebildet werden.