[gelöst] Datenbank öffnen -> lesen und schreiben

Alles rund um die Programmierung mit Qt
Antworten
keo
Beiträge: 8
Registriert: 21. März 2010 18:36

[gelöst] Datenbank öffnen -> lesen und schreiben

Beitrag von keo »

Hallo,

ich bekomme es nicht hin Datenbanken auszulesen und etwas in die Datenbank zu schreiben.

Hier mal ein Beispiel:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

db.setDatabaseName("test.db");
db.open();

QSqlQuery query(db);

--> Ich hatte vorher das gemacht:
query.exec("create table Notizen(ID int primary key,Text varchar(80))");
query.exec("insert into Notizen values(1,'Einkaufen gehen!')");

Damit habe ich die Datenbank erstellt?! Jedenfalls erscheint bei mir eine .db im Verzeichnis. So mit müsste ja auch der Eintrag mit Einkaufen gehen schon vorhanden sein.

Wenn ich jetzt aber das mache:

query.exec("select * from Notizen");
QString Ausgabe(query.value(0).toString());

passiert gar nichts, der String ist leer. Wo ist mein Fehler? Beim Eintragen in die Datenbak oder beim Auslesen?

Wäre für jeden Tipp dankbar!
Zuletzt geändert von keo am 29. März 2010 20:49, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Woher weisst du das der String leer ist und was sagt QSqlQuery::lastError() dazu?
Funktioniert überhaupt das einfügen? exec() gibt einen Status zurück den man auswerten sollte.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
keo
Beiträge: 8
Registriert: 21. März 2010 18:36

Beitrag von keo »

Hallo erst einmal, danke für die schnelle Antwort!
keo hat geschrieben: query.exec("create table Notizen(ID int primary key,Text varchar(80))");
lastError gibt hier 1 zurück
table Notizen already exists Unable to execute statement
keo hat geschrieben: query.exec("insert into Notizen values(1,'Einkaufen gehen!')");
lastError gibt hier 19 zurück
constraint failed Unable to fetch row

Aber was ist hier dran falsch?

keo hat geschrieben: query.exec("select * from Notizen");
lastError gibt hier -1 zurück
Textform-> Nichts


PS: Ich sehe im Debugger das der String leer ist.
Zuletzt geändert von keo am 28. März 2010 14:20, insgesamt 2-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

LastError hat bestimmt auch eine Textausgabe...
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag von Troll.Soft »

upsala hat geschrieben:LastError hat bestimmt auch eine Textausgabe...
die man auch unbedingt beachten sollte.

Eine Sache scheint im Program noch zu fehlen.
Query.first() wurde nicht aufgerufen. Ist aber zwingend notwendig.
Query.next() geht weiter zum nächsten Datensatz.
exec, first, next geben jeweils true or false zurück

tschüß
Troll.Soft
jerry42
Beiträge: 126
Registriert: 9. Oktober 2008 10:48

Beitrag von jerry42 »

zur Kontrolle kannst Du dich auch direkt (ohne Qt) mal mit der Datenbank verbinden und schauen, was da möglicherweise drinsteht oder auch nicht.

Aus der Konsole kannst Du tippen:
sqlite3 test.db
keo
Beiträge: 8
Registriert: 21. März 2010 18:36

Beitrag von keo »

Ah jetzt hab ich das hin bekommen! bzw. verstehe es jetzt.

Die Fehlermeldungen kommen natürlich, weil der Eintrag schon besteht!

Und ja, das first fehlt ;)

Danke euch!
ceumern
Beiträge: 28
Registriert: 16. September 2011 11:25

Re:

Beitrag von ceumern »

Troll.Soft hat geschrieben:Query.first() wurde nicht aufgerufen. Ist aber zwingend notwendig.
Kurze Anmerkung dazu, weil ich durch google gerade auf diesen Thread gestossen bin:

Wenn man query.next() verwendet ist Query.first() NICHT zwingend notwendig, wie aus der Dokumentation hervorgeht:

http://doc.trolltech.com/4.7/qsqlquery.html#next
Antworten