AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MSSQL: Datum wird nicht gespeichert
Thema durchsuchen
Ansicht
Themen-Optionen

MSSQL: Datum wird nicht gespeichert

Ein Thema von Biohazard · begonnen am 19. Feb 2004 · letzter Beitrag vom 23. Feb 2004
Antwort Antwort
Biohazard

Registriert seit: 20. Mär 2003
46 Beiträge
 
#1

MSSQL: Datum wird nicht gespeichert

  Alt 19. Feb 2004, 17:29
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). ???????????
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: MSSQL: Datum wird nicht gespeichert

  Alt 19. Feb 2004, 17:41
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"
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#3

Re: MSSQL: Datum wird nicht gespeichert

  Alt 19. Feb 2004, 17:45
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ß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: MSSQL: Datum wird nicht gespeichert

  Alt 19. Feb 2004, 17:55
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
  Mit Zitat antworten Zitat
Biohazard

Registriert seit: 20. Mär 2003
46 Beiträge
 
#5

Re: MSSQL: Datum wird nicht gespeichert

  Alt 20. Feb 2004, 09:32
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.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: MSSQL: Datum wird nicht gespeichert

  Alt 20. Feb 2004, 10:12
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!).
Miniaturansicht angehängter Grafiken
biohazard001.jpg  
  Mit Zitat antworten Zitat
Biohazard

Registriert seit: 20. Mär 2003
46 Beiträge
 
#7

Re: MSSQL: Datum wird nicht gespeichert

  Alt 20. Feb 2004, 11:54
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.
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#8

Re: MSSQL: Datum wird nicht gespeichert

  Alt 20. Feb 2004, 12:00
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.
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Biohazard

Registriert seit: 20. Mär 2003
46 Beiträge
 
#9

Re: MSSQL: Datum wird nicht gespeichert

  Alt 23. Feb 2004, 08:57
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
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#10

Re: MSSQL: Datum wird nicht gespeichert

  Alt 23. Feb 2004, 10:25
Wenn Du den ODBC-Treiber für MySQL installierst, kannstd Du auch ADO benutzen - habe ich ausprobiert - funktioniert.
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 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