Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Nur Daten zwischen 2 DateTimePickern anzeigen (https://www.delphipraxis.net/194413-nur-daten-zwischen-2-datetimepickern-anzeigen.html)

Luca Haas 17. Nov 2017 14:12

Datenbank: MSSQL • Version: ? • Zugriff über: TADO Query

Nur Daten zwischen 2 DateTimePickern anzeigen
 
Hi Leute,

ich bin dabei einen Filter in eins meiner Programme einzubauen, bei dem man 2 DateTimePicker hat und nur die Daten(Informationen) die zwischen diesen Daten(Kalender) liegen.
Ich habe noch einige andere Filtermöglichkeiten, die alle klappen, allerdings weiß ich nicht wie ich die Daten in einen String umgewandelt bekomme, mein Code sieht an der Stelle bis jetzt so aus
Delphi-Quellcode:
procedure TAufgabenForm.DBDurchsuchen();
var
  Filter: string;
begin
  // Wieviele Ergebnisse werden angezeigt
  Filter := Edit3.Text;
  if Filter <> '' then
    SQLBefehl := 'SELECT TOP ' + Filter + ' * FROM Aufgaben WHERE Erledigt <> 1'
  else
    SQLBefehl := 'SELECT TOP 1 * FROM Aufgaben WHERE Erledigt = 0';
  // Nach was wird gefiltert?
  if (Edit1.Text <> '') then
    SQLBefehl := SQLBefehl + (' AND MitarbeiterNr LIKE ''%' + StringReplace(Edit1.Text, '*', '%', [rfReplaceAll]) + '%''');
  if (Edit2.Text <> '') then
    SQLBefehl := SQLBefehl + (' AND MitarbeiterGruppe LIKE ''%' + StringReplace(Edit2.Text, '*', '%', [rfReplaceAll]) + '%''');
  // Wenn auch nach Datum gefiltert wird
  if CheckBox1.Checked then
    SQLBefehl := SQLBefehl + (' AND ' + DateTimePicker1.Date + ' <= Datum AND Datum <= ' + DateTimePicker2.Date + ' '); // Hier weiß ich nicht was hin muss
  // StandardSQL
  SQLBefehl := SQLBefehl + (' ORDER BY Position ');
  AufgabenQuery.Close();
  AufgabenQuery.SQL.Text := SQLBefehl;
  AufgabenQuery.Open()
end;

DeddyH 17. Nov 2017 14:18

AW: Nur Daten zwischen 2 DateTimePickern anzeigen
 
Tu Dir selbst einen Gefallen und parametrisiere Deine Statements (Parameter werden direkt im SQL-String durch Doppelpunkt gekennzeichnet). Beispiel:
Delphi-Quellcode:
DingsQuery.SQL.Text := 'SELECT Lalala FROM Tabelle WHERE Datum BETWEEN :mindatum AND :maxdatum';
DingsQuery.ParamByName('mindatum').AsDate := DTPMin.Date;
DingsQuery.ParamByName('maxdatum').AsDate := DTPMax.Date;
DingsQuery.Open;
Direkt im Editor getippt, deshalb ungetestet.

[edit] Bei TADOQuery heißt es dann DingsQuery.Parameters.ParamByName [/edit]

Luca Haas 17. Nov 2017 14:28

AW: Nur Daten zwischen 2 DateTimePickern anzeigen
 
Ich hab leider bisher noch nicht mit Parametern gearbeitet, ich denke sonst wäre ich alleine drauf gekommen

Ich hab die betroffene Stelle jetzt zu
Delphi-Quellcode:
  if CheckBox1.Checked then
    SQLBefehl := SQLBefehl + (' AND Datum BETWEEN :mindatum AND :maxdatum');
  AufgabenQuery.Parameters.ParamByName('mindatum').Value := DateTimePicker1.Date;
  AufgabenQuery.Parameters.ParamByName('maxdatum').Value := DateTimePicker2.Date;
geändert. Allerdings bekomme ich noch die Fehlermeldung, dass die Parameter nicht gefunden werden

DeddyH 17. Nov 2017 14:36

AW: Nur Daten zwischen 2 DateTimePickern anzeigen
 
Du hast ja auch nur den SQL-Befehl zusammengebaut, ihn aber nicht der Query zugewiesen.

Luca Haas 17. Nov 2017 14:39

AW: Nur Daten zwischen 2 DateTimePickern anzeigen
 
Das habe ich doch in den letzten Zeilen mit
Delphi-Quellcode:
  AufgabenQuery.Close();
  AufgabenQuery.SQL.Text := SQLBefehl;
  AufgabenQuery.Open()
gemacht.
Oder etwa nicht ?

Luca Haas 17. Nov 2017 14:47

AW: Nur Daten zwischen 2 DateTimePickern anzeigen
 
Okay hab den Fehler gefunden, ich musste
Delphi-Quellcode:
  AufgabenQuery.Parameters.ParamByName('mindatum').Value := DateTimePicker1.Date;
  AufgabenQuery.Parameters.ParamByName('maxdatum').Value := DateTimePicker2.Date;
unter
Delphi-Quellcode:
AufgabenQuery.SQL.Text := SQLBefehl;

einfügen. Somit läuft alles wie es soll, danke schön


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