![]() |
MSSQL: Datum wird nicht gespeichert
Hallo,
hab hier ein kleines Problem, welches ich nicht in den Griff bekomme. Ich versuche einen Datumswert in eine MSSQL Datenbank zu bekommen. Geht aber nicht. Das Feld in der DB ist vom Typ DateTime. So versuche ich zu schreiben:
Delphi-Quellcode:
Eigentlich müsste dies so funktionieren (So hat es zumindest bei anderen DB-Formaten funktioniert).
edit;
tabelle.fieldbyname('Datum').AsDateTime := date; post; Das Feld bleibt aber leer (NULL). ??????????? |
Re: MSSQL: Datum wird nicht gespeichert
Mmir fallen da gerade 2 Fehlerquellen ein:
- die Transaktion wird nicht mit einem Commit beendet - du verwendest eine andere Variable namens "Date", versuche mal "SysUtils.Date" |
Re: MSSQL: Datum wird nicht gespeichert
Wenn das nicht klappt, versuch es mit einer TQuery/TADOQuery/TBetterADOQuery:
Delphi-Quellcode:
Gruß
begin
DeineQuery.SQL.Clear; DeineQuery.SQL.Add('UPDATE Tabellenname'); DeineQuery.SQL.Add(' SET DeinDatumsFeld = '+ QuotedStr(DateToStr(FDeineDatumsVariable)); DeineQuery.SQL.Add(' WHERE DeinIdFeld = '+IntToStr(FDeineIdVariable)); DeineQuery.ExecSQL; end; |
Re: MSSQL: Datum wird nicht gespeichert
Leuselators Lösung, nur unabhängig von den Regionaleinstellungen von Server oder Client (da keine implizierte Umwandlung erfolgt):
Delphi-Quellcode:
Edit: DataType vergessen :oops:
With Query Do
Begin SQL.Text := 'Update XYZ.Tabelle t' + #10 + ' Set t.Datum = :i_Datum' + #10 + 'WHERE t.PK = :i_PK'; Prepared := True; Parameters.ParamByName('i_PK').Value := ID_Variable; Parameters.ParamByName('i_Datum').DataType := ftDateTime; Parameters.ParamByName('i_Datum').Value := SysUtils.Date; ExecSQL; End; |
Re: MSSQL: Datum wird nicht gespeichert
Hallo,
@GeorgeWNewbie SysUtils.Date geht auch nicht @All Das mit dem Update geht zwar ist aber nicht unbedingt die Lösung, da ich im ganzen Programm nur wegen dem Datumsfeldern extra Abfragen starten müsste und das zudem in einigen Funktionen sehr umständlich werden kann. das Problem ist, dass andere Werte zum gleichen Zeitpunkt geschrieben werden und diese auch drin stehen. Also muß es doch irgendetwas mit dem Datum an sich zu tun haben. Kommt das Feld in der DB evtl. nicht mit dem Wert der Funktion Date klar. |
Re: MSSQL: Datum wird nicht gespeichert
Liste der Anhänge anzeigen (Anzahl: 1)
Moin...
Erst einmal: Gerade bei vielen Änderungen ist ein UPDATE-Statement die Lösung. Du kannst in der SET-Clause mehrere Werte in einem Aufruf beschreiben...
SQL-Code:
... der Traffic im Netzwerk & auf dem Server kann dadurch massiv minimiert werden. Außerdem verhindert man durch die Verwendung von Parametern in den SQL-Statements ein erneutes parsen des SQL-Codes & implizierte Umwandlungen -> weniger CPU-Overhead.
SET Feld1 = :i_Feld1,
Feld2 = :i_Feld2, ... Wenn du für dein Projekt eine vernünftige Kapselung einer Query schreibst ist es praktischer & übersichtlicher als alle DB-Kompo-Basteleien. Du hast doch sicher zum SQL-Server eine IDE in der du genau dieses Statement absetzen kannst und testen kannst (im Anhang ist das in meiner Oracle-IDE). Ich bin mir ziemlich sicher, dass das funktionieren müsste. Erstens hat Leuselator viel Erfahrung mit dem SQL-Server und zweitens ist SQL ein Standard der vom SQL-Server sehr genau eingehalten wird (unter Oracle würde es funktionieren!). |
Re: MSSQL: Datum wird nicht gespeichert
OK. Wird mir wohl nichts anderes übrigbleiben als alles mit SQL zu machen.
Das Problem ist, dass das Programm schon steht. Ich versuche jetzt nur es auf ein anderes DB-Format anzupassen.(vorher MYSQL). Da ging das Eintragen vom Datum ja auch. Irgendeinen Grund muß es ja geben warum MSSQL das Datum nicht annimmt. |
Re: MSSQL: Datum wird nicht gespeichert
Schau Dir die Landes- bzw. Datumseinstellungen auf dem Server und dem Client an - da klemmt es gern.
Ansonsten, wenn Du den Zeit-Anteil nicht benötigst, versuch mal zur Not: Table.FieldByName('FeldName').AsInteger := trunc(DeinDelphiDatumsWert+2); [Edit] in Delphi DateTime = 0 = 30.12.1899 in MS-SQL datetime = 0 = 01.01.1900 - deshalb: MS-SQL.Datum = Delphi.Datum+2 und umgekehrt... [/Edit] Gruß PS.: TTable ist halt nicht für SQL-Server gedacht - hatten wir hier im Forum schon öfter, das Thema. Wenn Du kannst/willst/Zeit reicht, stell auf ADO/BetterADO um - spart Dir jede Menge Trödel. |
Re: MSSQL: Datum wird nicht gespeichert
Ok. Habs jetzt doch mit SQL-Anweisungen umgesetzt.
Jeder andere Versuch ist irgendwie fehlgeschlagen. Bei einem kleinen Testprogramm habe ich gemerkt, dass das Datum zwar eingetragen wurde, beim Posten aber nicht gespeichert wurde. @Leuselator Zitat:
Nur mal so nebenbei : Kann man mit ADO auch MySQL Datenbanken zugreifen oder ist ZEOS dafür besser geeignet? Danke für die Hilfe |
Re: MSSQL: Datum wird nicht gespeichert
Wenn Du den ODBC-Treiber für MySQL installierst, kannstd Du auch ADO benutzen - habe ich ausprobiert - funktioniert.
Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz