Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Sybase SQL Anywhere SQL Problem (Datum) (https://www.delphipraxis.net/27503-sybase-sql-anywhere-sql-problem-datum.html)

tuxracer78 11. Aug 2004 09:51


Sybase SQL Anywhere SQL Problem (Datum)
 
Hallo,

Ich manipuliere eine SQL-Abfrage mit einem DateTimePicker. Mit MySQL hat das wunderbar funktioniert, nur mit Sybase SQL Anywhere nicht.
Ich bekomme folgende Fehlermeldung beim Kompilieren: Meldung: '[Sybase][ODBC Driver]: cannot convert 01.01.2004 to a date/time.'
Wenn ich mir aber mit Delphi über den ODBC-Treiber zum Test das Belegdatum eines Datensatzes anschaue (z.B. über ein DBText), erscheint es im Format 00.00.0000. Dann habe ich zum Test 'Seldate := DateToStr(DateTimePicker1.Date)' in 'Seldate := DateTimeToStr(DateTimePicker1.DateTime)' geändert. Das Ergebnis ist der gleiche Fehler. Kann es sein, daß Sybase SQL Anywhere bzw. der ODBC-Treiber das Datum auf Deutsch anzeigt, in Abfragen aber Amerikanische Schreibweise fordert?

Auszug aus dem code:
Delphi-Quellcode:
procedure TForm1.Action2Execute(Sender: TObject);
var Seldate: String; Anzahl: Integer;
begin
  Seldate := DateToStr(DateTimePicker1.Date);
  With ADOQuery1 do
    Begin
      SQL.Text:= 'SELECT KHKVKBelege.A0Empfaenger AS Kunde, KHKVKBelege.A1Anrede, KHKVKBelege.A1Name1, KHKVKBelege.A1Name2, KHKVKBelege.A1Strasse, KHKVKBelege.A1PLZ, KHKVKBelege.A1Ort, KHKVKBelege.Belegdatum FROM KHKVKBelege WHERE KHKVKBelege.Belegdatum >= :i_Date';
      Prepared := True;
      ADOQuery1.Parameters.ParamByName('i_Date').Value := Seldate;
end;

Gruss

Gregor

[edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit]

Sharky 11. Aug 2004 10:05

Re: Sybase SQL Anywhere SQL Problem (Datum)
 
Hai tuxracer78,

überlasse doch die Konvertierung des Datumsformates dem Treiber. Dadurch bist Du unabhängig von dem beim Anwender eingestellt Datumsformat.

Delphi-Quellcode:
procedure TForm1.Action2Execute(Sender: TObject);
var Seldate: String; Anzahl: Integer;
begin
//  Seldate := DateToStr(DateTimePicker1.Date); // Das brauchen wir nicht
  With ADOQuery1 do
    Begin
      SQL.Text:= 'SELECT KHKVKBelege.A0Empfaenger AS Kunde, KHKVKBelege.A1Anrede, KHKVKBelege.A1Name1, KHKVKBelege.A1Name2, KHKVKBelege.A1Strasse, KHKVKBelege.A1PLZ, KHKVKBelege.A1Ort, KHKVKBelege.Belegdatum FROM KHKVKBelege WHERE KHKVKBelege.Belegdatum >= :i_Date';
      Prepared := True;
      ADOQuery1.Parameters.ParamByName('i_Date').AsDate := DateTimePicker1.Date; // Jetzt konvertiert der Treiber.
end;

tuxracer78 11. Aug 2004 10:33

Re: Sybase SQL Anywhere SQL Problem (Datum)
 
Vielen Dank für die schnelle Antwort,

leider funktioniert das so noch nicht.
Ich bekomme folgende Fehlermeldung:

Undefinierter Bezeichner: 'AsDate'.

Muss ich da noch irgendwas in die uses einbinden?

Gruss

Gregor

Sharky 11. Aug 2004 10:37

Re: Sybase SQL Anywhere SQL Problem (Datum)
 
Zitat:

Zitat von tuxracer78
...Undefinierter Bezeichner: 'AsDate'...

Ups, hast recht. ADOQuery kennt das nicht. Versuche es mal so:
Delphi-Quellcode:
begin
.
.
  ADOQuery1.Parameters.ParamByName('i_Date').DataType := ftDate;
  ADOQuery1.Parameters.ParamByName('i_Date').Value := DateTimePicker1.Date;
.

Robert_G 11. Aug 2004 10:42

Re: Sybase SQL Anywhere SQL Problem (Datum)
 
Zitat:

Zitat von tuxracer78
Vielen Dank für die schnelle Antwort,

leider funktioniert das so noch nicht.
Ich bekomme folgende Fehlermeldung:

Undefinierter Bezeichner: 'AsDate'.

Muss ich da noch irgendwas in die uses einbinden?

Nö, unser Goldfischlein hatte wieder nur seine ZEOS im Kopf. ;)

Bei ADO kannst du bei einem unfähigen OLE-Provider nur hoffen, dass das reicht. :roll:
Delphi-Quellcode:
with ADOQuery Do
begin
  SQL.Text :=
    'SELECT k.A0Empfaenger as Kunde' + #10 +
    '     ,k.A1Anrede' + #10 +
    '     ,k.A1Name1' + #10 +
    '     ,k.A1Name2' + #10 +
    '     ,k.A1Strasse' + #10 +
    '     ,k.A1PLZ' + #10 +
    '     ,k.A1Ort' + #10 +
    '     ,k.Belegdatum' + #10 +
    'FROM  KHKVKBelege k' + #10 +
    'WHERE k.Belegdatum >= :i_Date';
  // Parse Statement um Variablen zu erkennen
  Prepared := True;
  // Parameterzuweisung
  with Parameters do
  begin
    ParamByName('i_Date').DataType := ftDate;
    ParamByName('i_Date').Value   := DateTimePicker1.Date;
  end;
  // Ausführen
  Open();
end;
Edit: :lol: war wohl doch zu langsam.
@Sharky Bitte nicht beißen :roll:

tuxracer78 11. Aug 2004 10:46

Danke, funktioniert jetzt.
 
Nochmals herzlichen Dank,

jetzt ist Land in Sicht ;-)

Gruss

Gregor

Sharky 11. Aug 2004 10:48

Re: Sybase SQL Anywhere SQL Problem (Datum)
 
Zitat:

Zitat von Robert_G
...Nö, unser Goldfischlein hatte wieder nur seine ZEOS im Kopf. ;)
.
.@Sharky Bitte nicht beißen :roll:

:stupid: *schnapp* :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:36 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