Einzelnen Beitrag anzeigen

Crowbar

Registriert seit: 17. Jun 2002
43 Beiträge
 
#1

Umstellung auf SQL-Filterung

  Alt 21. Jul 2014, 15:06
Datenbank: dbf • Version: x • Zugriff über: TTable, TQuery, TDatasource
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 >=... ???

Geändert von Crowbar (21. Jul 2014 um 15:27 Uhr)
  Mit Zitat antworten Zitat