Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MSSQL: Datum wird nicht gespeichert (https://www.delphipraxis.net/16585-mssql-datum-wird-nicht-gespeichert.html)

Biohazard 19. Feb 2004 16:29


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:
edit;
tabelle.fieldbyname('Datum').AsDateTime  := date;
post;
Eigentlich müsste dies so funktionieren (So hat es zumindest bei anderen DB-Formaten funktioniert).

Das Feld bleibt aber leer (NULL). ???????????

Robert_G 19. Feb 2004 16:41

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"

Leuselator 19. Feb 2004 16:45

Re: MSSQL: Datum wird nicht gespeichert
 
Wenn das nicht klappt, versuch es mit einer TQuery/TADOQuery/TBetterADOQuery:
Delphi-Quellcode:
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;
Gruß

Robert_G 19. Feb 2004 16:55

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:
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;
Edit: DataType vergessen :oops:

Biohazard 20. Feb 2004 08:32

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.

Robert_G 20. Feb 2004 09:12

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:
  SET Feld1 = :i_Feld1,
      Feld2 = :i_Feld2,
      ...
... 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.
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!).

Biohazard 20. Feb 2004 10:54

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.

Leuselator 20. Feb 2004 11:00

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.

Biohazard 23. Feb 2004 07:57

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:

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.
Habe mit der Query von ZEOS darauf zugegriffen.
Nur mal so nebenbei : Kann man mit ADO auch MySQL Datenbanken zugreifen oder ist ZEOS dafür besser geeignet?

Danke für die Hilfe

Leuselator 23. Feb 2004 09:25

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 20:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz