Entwickler-Ecke

Datenbanken - Über MonthCalendar Datenbank auf Datum Filtern per Query


Arne Danikowski - Fr 19.12.08 13:43
Titel: Über MonthCalendar Datenbank auf Datum Filtern per Query
Hallo,

ich finde hier irgendwie nicht die richtige Lösung.
Ich möchte über einen MonthCalendar ein SQLQuery erstellen, welches nur die Datensätze anzeigt, mit dem markiertem Datum aus dem MonthCalendar.

Ich habe eine Access Datenbank das Feld ist ein Datumsfeld mit Format kurz (tt.mm.jjjj)

folgendes haben ich versucht:


Delphi-Quelltext
1:
DM.ADOQuery1.SQL.Text := 'Select * From Eintrag WHERE DATUM = '+ DateToStr(MonthCalendar1.Date);                    


ich erhalte allerding die Fehlermeldung Syntaxfehler in Zahl in Abfrageausdruck 'Datum = 19.12.2008'

kann da jemand helfen?


Delete - Fr 19.12.08 13:49

Versuch es mal mit einer parametrisierten Abfrage:

Delphi-Quelltext
1:
2:
DM.ADOQuery1.SQL.Text := 'Select * From Eintrag WHERE DATUM = :datum';
DM.ADOQuery1.Parameters.ParamByName('datum').Value := MonthCalendar1.Date;


Ohne Gewähr, ich mache normalerweise nix mit ADO.


Arne Danikowski - Fr 19.12.08 13:57

Da bekomme ich die Fehlermeldung:

ADOQuery1: Parameter 'Datum' nicht gefunden


Delete - Fr 19.12.08 14:09

Komisch, zeig mal den aktuellen Code.


Arne Danikowski - Fr 19.12.08 14:15

Ich hatte die Zeilen in falscher Reihenfolge
so sieht das auch und nun bekomme ich zwar keine Fehlermeldung, aber es funktioniert nicht. Eigentlich passiert gar nichts.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm2.MonthCalendar1Click(Sender: TObject);

begin
DM.ADOQuery1.SQL.Text := 'Select * From Eintrag WHERE DATUM = :datum ORDER BY DATUM';
DM.ADOQuery1.Parameters.ParamByName('datum').Value := MonthCalendar1.Date;
DM.ADOQuery1.open;

end;


Delete - Fr 19.12.08 14:24

Nächster Versuch (ich hab von Access keine Ahnung, sag ich gleich dazu):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm2.MonthCalendar1Click(Sender: TObject);
begin
  DM.ADOQuery1.Close;
  DM.ADOQuery1.SQL.Text := 'Select * From Eintrag WHERE DATUM = :datum ORDER BY DATUM';
  DM.ADOQuery1.Parameters.ParamByName('datum').DataType := ftDate;
  DM.ADOQuery1.Parameters.ParamByName('datum').Value := MonthCalendar1.Date;
  DM.ADOQuery1.open;
end;


Arne Danikowski - Fr 19.12.08 14:28

voher hast du denn ftdate? Wie deklariere ich den? Ist das nur ne Variable?


Delete - Fr 19.12.08 14:36

Das ist eine Konstante (Unit DB).


Arne Danikowski - Fr 19.12.08 14:39

:) hab keine DB Unit


Arne Danikowski - Fr 19.12.08 14:43

Habe die USES mal hinzugefügt. Bring aber leider uch nichts. egal, welches Datum ich über den MonthCalendar auswähle, er springt immer zum ersten Datensatz.


Delete - Fr 19.12.08 14:44

Gut, dann anders (ansonsten muss ich das zu Hause mal mit einem "richtigen" Delphi versuchen):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm2.MonthCalendar1Click(Sender: TObject);
begin
  DM.ADOQuery1.Close;
  DM.ADOQuery1.SQL.Text := 'Select * From Eintrag WHERE DATUM = :datum ORDER BY DATUM';
//  DM.ADOQuery1.Parameters.ParamByName('datum').DataType := ftDate;
  DM.ADOQuery1.Parameters.ParamByName('datum').Value := trunc(MonthCalendar1.Date);
  DM.ADOQuery1.open;
end;


[edit] Hö? Nach einem Open springt der Datensatzzeiger immer auf den ersten Datensatz, das hat aber mit der Abfrage an sich nichts zu tun. [/edit]