AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Datenbanken Delphi DateTime-Konstanten in SQL-Anweisungen benutzen
Thema durchsuchen
Ansicht
Themen-Optionen

DateTime-Konstanten in SQL-Anweisungen benutzen

Ein Thema von shmia · begonnen am 26. Mär 2004 · letzter Beitrag vom 26. Mär 2004
 
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

DateTime-Konstanten in SQL-Anweisungen benutzen

  Alt 26. Mär 2004, 16:48
Bei SQL-Abfragen bringt ein Datums oder Zeitfeld
häufig Probleme ins Haus, da in SQL das Format nicht definiert
wurde und jeder DBMS-Hersteller sein eigenes Süppchen kocht.
Daher muss man Datums/Zeitwerte in Parametern übergeben und die
Treiber sorgen im Hintergrund für die richtige Umwandlung.

Was aber tun, wenn die SQL-Abfrage dynamisch vom Benutzer/Programm
erzeugt wird ?

Zumindest für den MS SQL-Server und für MS Access gibt es hier eine
Lösung.
Folgende Funktionen arbeiten unabhängig von eingestellten Datums-/Zeitformat.


Delphi-Quellcode:
function DateTimeToSQLServerDateTimeString(value: TDateTime):string;
begin
  Result := '{ ts'+QuotedStr(FormatDateTime('yyyy-mm-dd hh":"nn":"ss.z', value))+' }';
end;

function DateTimeToSQLServerDateString(value: TDateTime):string;
begin
  Result := '{ d'+QuotedStr(FormatDateTime('yyyy-mm-dd', value))+' }';
end;

function DateTimeToSQLServerTimeString(value: TDateTime):string;
begin
  Result := '{ t'+QuotedStr(FormatDateTime('hh":"nn":"ss.z', value))+' }';
end;


procedure CharReplace(var S: AnsiString; const Search, Replace: AnsiChar);
var
  i : Integer;
begin
  for i := 1 to Length(S) do
    if S[i]=Search then
      S[i]:=Replace;
end;

function DateTimeToAccessDateTimeString(value: TDateTime):string;
begin
  // Da Access (Jet-Engine) ein Datum als Double speichert...
  Result := FloatToStr(value);
  CharReplace(Result, ',', '.');
end;
Hier noch ein Beispiel für den SQL-Server:

Delphi-Quellcode:
// Zeige Aufträge geliefert innerhalb der letzten 30 Tage
Query1.SQL.Text := 'SELECT * FROM Auftrag';
Query1.SQL.Add('WHERE Lieferdatum>'+DateTimeToSQLServerDateTimeString(now-30.0);
[edit=Matze]Code formatiert. Mfg, Matze[/edit]
Andreas
  Mit Zitat antworten Zitat
 

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 19:45 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