Datum konvertieren



  • Hi,

    ich habe eine GUI mit WindowForms programmiert, ein DataSet angelegt und mit den Textfeldern verbunden. Ich kann Daten aus der angebundenen Access-datenbank abrufen und anzeigen lassen. Wenn ich jetzt aber Daten in die Datenbank schreiben will, gibt es ein Problem mit den Feldern vom Typ DateTime.
    Er sagt mir ständig, dass er den typ nicht in int32 konvertieren kann. Wenn ich das aber nun manuell mache mir Convert::ToInt32, gibt er mir beim kompilieren auch eine Fehlermeldung. Was kann ich tun. Sowohl das Eingabefeld im Forumlar als auch das Datenfeld in der Tabelle sind vom typ DateTime, es sollte also funktionieren.

    Pascal



  • Zeige Code.
    Simon



  • Hi, hier der Code:

    DateTime dAnnahmeDatum = Convert::ToDateTime(this->Annahmedate->Text);
    String^ sAuftragsErsteller = this->Auftragsannehmer->Text;
    String^ sTitel = this->Titel->Text;
    DateTime dTerminDatum = Convert::ToDateTime(this->TerminDate->Text);

    this->tbl_Auftrag_AllgTableAdapter->InsertNeuerAuftrag(sAuftragsErsteller, dAnnahmeDatum, sTitel, dTerminDatum, Convert::ToString('NULL'), Convert::ToBoolean('NULL'), Convert::ToDateTime(0), Convert::ToBoolean('NULL'), Convert::ToDateTime(0), Convert::ToString('NULL'));

    Kompilieren klappt einwandfrei, aber beim Schreiben in die datenbank sagt er,
    dass die Konvertierung von date in int32 ungültig wäre.

    Pascal



  • this->tbl_Auftrag_AllgTableAdapter->InsertNeuerAuftrag(sAuftragsErsteller, dAnnahmeDatum, sTitel, dTerminDatum, Convert::ToString('NULL'), Convert::ToBoolean('NULL'), Convert::ToDateTime(0), Convert::ToBoolean('NULL'), Convert::ToDateTime(0), Convert::ToString('NULL'));

    In der Doku steht, dass Int32 kein gültiger Parameter für Convert::ToDateTime(..) wäre. Das geht also nicht.

    Übergib doch DateTime::Now oder versuchs mit nullptr.
    Simon



  • Ich habe auch schon probiert Convert::ToDateTime('NULL'), aber das hat auch nicht geklappt. Das Problem ist, dass ich ihm irgendwie sagen muss, dass er nichts oder einen NULL-Wert in die Datenspalte schreiben muss. Weglassen kann ich die Parameter ja leider nicht.

    Pascal



  • Ich meinte:

    this->tbl_Auftrag_AllgTableAdapter->InsertNeuerAuftrag(sAuftragsErsteller, dAnnahmeDatum, sTitel, dTerminDatum, Convert::ToString('NULL'), Convert::ToBoolean('NULL'), DateTime::Now, Convert::ToBoolean('NULL'), DateTime::Now, Convert::ToString('NULL'));
    

    oder

    this->tbl_Auftrag_AllgTableAdapter->InsertNeuerAuftrag(sAuftragsErsteller, dAnnahmeDatum, sTitel, dTerminDatum, Convert::ToString('NULL'), Convert::ToBoolean('NULL'), nullptr, Convert::ToBoolean('NULL'), nullptr, Convert::ToString('NULL'));
    


  • Es gibt doch für die Spalten einen Parameter das die Zelle einen Wert haben muss oder nicht. Könnte der das Problem sein?



  • Ja, das stimmt, lässt sich aber bei datumsfeldern nicht auf null setzen. Irgendwie blöd.

    Pascal



  • Und wenn du ein Datum nimmst das nie gebraucht wird. Dann könntest du dieses Beispielsweise beim Anzeigen filtern und das Feld leer lassen.



  • Ich kann mir DateTime::MinValue ein leeres Datum angeben, genau das was ich gesucht habe. Danke für all eure Vorschläge.



  • DateTime ist im folgenden format "00/00/0000 00:00:00" es kann also nicht funktionieren dies zu int zu konvertieren.

    du kannst allerdings auf die einzelnene komponenten des DateTime zugreifen also auf tag,monat,jahr usw... die einzeln aus dem datetime rausholen und z.b. zu int konvertieren



  • Danke, da hast du natürlich recht. Ich ging bei meiner Annahme davon aus, das nur das Datum und nicht die Uhrzeit angegeben werden. Aber es klappt ja jetzt.

    Pascal


Anmelden zum Antworten