QDateEdit - setDate mit Werten aus Datenbank klappt nicht

Alles rund um die Programmierung mit Qt
Antworten
Lichter
Beiträge: 23
Registriert: 20. Januar 2011 12:48

QDateEdit - setDate mit Werten aus Datenbank klappt nicht

Beitrag von Lichter »

Guten Morgen,
ich versuche momentan ein QDateEdit mit einem vorher gespeicherten Datum zu füllen.
Der Code ist folgender:

Code: Alles auswählen

ui_dialog.dteEdit_Ende->setDate(edt_query.value(2).toDate());
Leider behält QDateEdit sein Standard gesetztes Datum?!
Danke!

PS: Wie resette ich ein QDateEdit? clear() funktioniert nicht.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Wie sieht dein db-schema aus? Wie der Query? Macht clear() gar nichts? clear != reset (was es nicht gibt)!
Lichter
Beiträge: 23
Registriert: 20. Januar 2011 12:48

Beitrag von Lichter »

Ich habe eine SQLite Datenbank, deren Spalte in der das Datum gespeichert wird ein TextFeld ist. Clear() macht leider nichts. Ich habe zu meinem Hauptfenster noch zusätzlich einen Dialog, in der die Daten vom User eingetragen werden. Wenn ich den Dialog öffne und im Datumsfeld z.B. 20.04.2011 eintrage, den Dialog anschließend beende und wieder öffne, bleibt der alte Wert vorhanden. (und das obwohl ich "clear()" aufgerufen habe) Ähnlich sieht es aus, wenn ich den Dialog zum bearbeiten öffne und die Felder mit den Werten aus der Datenbank füllen will - der alte Wert bleibt vorhanden, auch wenn ich wie oben beschrieben setDate() aufrufe.

Die Query ist folgendermaßen aufgebaut:

Code: Alles auswählen

edt_query.prepare("SELECT * FROM Protokoll WHERE (ID = :id)");
Die erste Spalte in der Tabelle ist die ID, zwei, drei und elf sind fürs Datum vorgesehen.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Lichter hat geschrieben:Ich habe eine SQLite Datenbank, deren Spalte in der das Datum gespeichert wird ein TextFeld ist.
Und deshalb geht es nicht!
http://www.sqlite.org/datatype3.html
http://www.sqlite.org/lang_datefunc.html
Qt macht aber einige Workarounds, wenn es um Kompatibilität geht. Ich hab eine sqlite3-DB mit dem Datentyp "DATETIME" verwendet, Qt wird den im sqlite3-Backend in einen passenden Datentyp umwandeln.
WICHTIG: Inserts darfst du nicht mit dateEdit->text() füttern, sondern mit dateEdit->date(), sonst stimmt das Format nicht!
Clear() macht leider nichts.
Weil clear() den Eintrag, auf dem der Cursor liegt, löscht, nicht das ganze lineEdit. Liegt er auf dem Monat, wird nur das Monat gelöscht, alles andere bleibt unangetastet, usw.
Ich habe zu meinem Hauptfenster noch zusätzlich einen Dialog, in der die Daten vom User eingetragen werden.
Fehler: Speichere den Dialog nicht! Ein Dialog-Objekt erstellt man normalerweise an der Stelle, an der er benötigt wird. So ist er immer frisch und unbenutzt. Willst du, dass bestimmte Daten angezeigt werden sollen, kannst du das gleich über einen passenden Konstruktor regeln, oder über entsprechende Setter - oder (wie die ganzen QDialog-Derivate wie QFileDialog, QMessageBox, ...) via entsprechender static-Methoden.
Die erste Spalte in der Tabelle ist die ID, zwei, drei und elf sind fürs Datum vorgesehen.
Nur um sicher zu gehen: Auch hier wird wie bei Arrays bei 0 zu Zählen begonnen.
Lichter
Beiträge: 23
Registriert: 20. Januar 2011 12:48

Beitrag von Lichter »

Ich habe nun meine Datenbank angepasst, indem ich DateTime Datentypen verwende.
Fehler: Speichere den Dialog nicht!
Wie ist das gemeint? Der Dialog wird vom Destruktor mit destroy() bearbeitet.
Ein Dialog-Objekt erstellt man normalerweise an der Stelle, an der er benötigt wird.
D.h. der Dialog ist aus deiner Sicht unnötig?

Ich benutze den Dialog zum Einen als Mittel zur Eingabe von Daten, die anschließend in die Datenbank geschrieben werden und andererseits um die Daten in der Datenbank zu editieren. Wünschenswert wäre es, wenn die DateTime-Felder (wenn der Dialog im Editier-Modus offen ist) mit den Daten aus der Datenbank übereinstimmen. Folgendes habe ich erfolglos probiert:

Code: Alles auswählen

ui_dialog.dteEdit_Anfang->setDateTime(edt_query.value(1).toDateTime());
Seltsam ist auch, dass obwohl der Dialog "zerstört" wird, die DateTime Felder nicht "resettet" werden?!
Antworten