QDate und Qt::ISODate



  • Servus,

    habe ein Problem mit folgendem Code:

    QDate birthday; // Am Anfang der Methode lege ich ein QDate Objekt an
    [...]
    

    weiter unten lese ich das Geburtsdatum (Format: yyyy-MM-dd bzw. Qt::ISODate) einer Person in einer Schleife aus meiner Datenbank aus:

    [...]
    birthdayString = query.value(record.indexOf("pbirthday")).toString();
    [...]
    

    Nachdem ich alle nötigen Informationen der Person aus der Datenbank gelesen habe, möchte ich ein QDate aus dem String des Geburtsdatums und anschließend ein Objekt der Person erzeugen:

    [...]
    birthday = QDate::fromString(birthdayString, Qt::ISODate); // ISODate = YYYY-MM-DD
    Person *person = new Person(firstname, lastname, birthday, email, id.toInt());
    [...]
    

    Allerdings erhalte ich direkt beim Programmstart folgenden Fehler:

    Die Anweisung in "0x00414fb6" verweist auf Speicher in "0x00000001". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.
    

    Im Debug Modus sieht es folgendermaßen aus:
    http://g85.img-up.net/Unbenanntuxx3u.PNG

    Signal erhalten
    Der Prozess wurde nach Erhalt eines Signals vom Betriebssystem angehalten.
    
    Name des Signals: SIGSEGV
    Bedeutung: Segmentation fault
    

    Kenne diesen Fehler nur daher, wenn man auf ein Objekt zeigt, dass nicht mehr existiert. Ich verstehe aber nicht, warum das in diesem Fall so ist.

    Gruß
    Kk51



  • Kannst du mal bitte ein kurzes komilierbares Beispielprogramm zusammen stellen, das den Fehler auufweist? Komplett ohne DB, String hardkodiert. Ich seh nämlich nicht, wo es da crashen soll.
    Ansonsten können Datenbanken auch Date/DateTime abspeichern, die kannst du direkt aus dem QVariant in ein QDate-Objekt umwandeln - komplett ohne Eigenformatierung eines QString. Aber vllt. geht das eh schon - versuch mal statt query(...).toString() ein .toDate()



  • Einmal drüber geschlafen und schon habe ich den Fehler gefunden. Ich trage die Personen auch immer direkt in eine Liste ein. Leider habe ich vergessen, diese im Konstruktor zu initialisieren. Also wollte er die Person auf die Liste schreiben, die es noch gar nicht gab. Verwirrend für mich war halt, dass man sich ein QDate nicht im Debugger ansehen kann. Danke für die Hilfe.

    Nochmal zu deiner Aussage zwecks direkt beim Auslesen ein QDate erzeugen: Bei SQLite gibt es doch gar keinen Datentyp für Daten, oder irre ich mich? Ich meine, es ist ja kein Problem, kurz zu parsen, da das Format immer eingehalten wird.


Anmelden zum Antworten