Hallo,
ich bin gerade dabei mein kleines Rechnungsprogramm von TTable nach TQuery (inkl.
SQL-Befehle) umzuschreiben.
In meinem Rechnungsprogramm sollen die Rechnungen angezeigt werden, dessen Buchnungsdatum (Tabellenfeld "RESTELLUNG") gegenüber dem aktuellen Datum größer-gleich der Mahntage (z.B. 14 Tage) sind.
Im Prinzip sollen alle erstellten Rechnungen, die vor 14 Tagen erstellt wurden und kein Rechnungseingangsdatum besitzen, angezeigt werden (= für Mahnungen).
Diesen "OnFilterRecord"-Event (TTable) habe ich bisher wie folgt programmiert und läuft auch so wie gewollt:
Delphi-Quellcode:
...
MahnTage:=14;
...
{ Differenz der Tage ermitteln }
Function TMainForm.DaysBetween(const d1,d2: TDateTime) : Integer;
begin
Result:=Trunc(d1)-Trunc(d2);
end;
...
Procedure TMainForm.DBBuchungTableFilterRecord(DataSet: TDataSet; var Accept: Boolean);
Var
Tage : Integer;
begin
if (FilterFeld = 'MAHNUNG') then
begin
if ((DBBuchungTable.FieldByName('REEINGANG').AsString = '') and (DBBuchungTable.FieldByName('KATEGORIE').AsWideString = 'Einnahmen') and not (DBBuchungTable.FieldByName('RESTELLUNG').AsString = '') then
begin
Tage:=DaysBetween(Now,StrToDate(DBBuchungSQLQuery.FieldByName('RESTELLUNG').AsString));
Accept:=(Tage >= MahnTage);
end;
end;
end;
...
Nun möchte ich diese Abfrage/Filterung per
SQL lösen.
Filterbedingungen:
Nur die Rechnungen der KATEGORIE "Einnahmen" anzeigen, dessen Datum im Feld "RESTELLUNG" größer-gleich der Mahntage (z.B. 14 Tage) sind und das Datum für Rechnungseingang (Feld "REEINGANG") leer ist.
Zusätzlich ... das Feld "RESTELLUNG" darf auch nicht leer sein.
Zusammengefaßt:
- im Feld "KATEGORIE" => muss "Einnahmen" stehen
und
- das Feld "RESTELLUNG" darf nicht leer sein
und
- das Feld "REEINGANG" muss leer sein
und
- das Datum im Feld "RESTELLUNG" muss größer-gleich 14 Tage vor dem aktuellen Datum sein
Irgendwie stehe ich jetzt hier, durch die vielen "Bedingungsabfragen", auf dem Schlauch.
SQLText:='SELECT * FROM Buchung WHERE KATEGORIE ="Einnahmen" AND REEINGANG = '+QuotedStr('')+' AND RESTELLUNG >=... ???