Registriert seit: 16. Jun 2005
9 Beiträge
|
filter bei berechneten feldern
4. Jul 2005, 01:30
Datenbank: Firebird • Zugriff über: ibconsole
Hallo zusammen,
habe folgendes Problem:
Ich habe eine Buchungsliste die ich mit folgender Funktion filtere.
Delphi-Quellcode:
function TListeBuchungen.GetSql: string;
var i: integer;
s, sFilter, sPattern: string;
begin
query.sql.clear;
query.sql.add(' SELECT ');
query.sql.add(' BUCHUNGLFDNR, ');
query.sql.add(' LFDNR, ');
query.sql.add(' BUCHUNGNR, ');
query.sql.add(' TICKETNR, ');
query.sql.add(' ADRNR, ');
query.sql.add(' VERANSTALTER, ');
query.sql.add(' HINABFLUGDATUM, ');
query.sql.add(' HINABFLUGZEIT, ');
query.sql.add(' HINABFLUGORT, ');
query.sql.add(' HINANKUNFTORT, ');
query.sql.add(' HINFLUGNR, ');
query.sql.add(' ');
query.sql.add(' RUECKABFLUGDATUM, ');
query.sql.add(' RUECKABFLUGZEIT, ');
query.sql.add(' RUECKABFLUGORT, ');
query.sql.add(' RUECKANKUNFTORT, ');
query.sql.add(' RUECKFLUGNR, ');
query.sql.add(' ');
query.sql.add(' NETTOPREIS, ');
query.sql.add(' ANZAHLUNG, ');
query.sql.add(' TAX, ');
query.sql.add(' MWST, ');
query.sql.add(' RABATT, ');
query.sql.add(' GEWINNPROZENT ');
query.sql.add(' ');
query.sql.add(' FROM BUCHUNGEN ');
query.sql.add(' WHERE EXTRACT (YEAR FROM HINABFLUGDATUM) = ' +#39+ CBYear.Items.Strings[CBYear.itemindex] + #39);
query.sql.add(' %s ');
query.sql.add(' ORDER BY HINABFLUGDATUM ');
Result := query.SQL.Text;
//Result := 'SELECT * FROM adressen %s ORDER BY name';
sFilter := AnsiUppercase(Trim(edit1.Text));
s := ' ';
if sFilter <> ' ' then begin
sPattern := QuotedStr(' %' + SFilter + ' %');
with query do
for i := 0 to FieldCount - 1 do
if Fields[i].DataType = ftString then begin
if s <> ' ' then s := s + ' OR';
s := s + Format(' UPPER(%s) LIKE %s', [LowerCase(Fields[i].FieldName), sPattern]);
end;
s := ' AND ' + s;
end;
Result := Format(Result, [s]);
end;
In dieser Liste habe ich auch berechnete Felder (NAME UND VORNAME) die ich manuell in das query eingefügt habe
und in dem OnCalcField-Ereignis mit folgendem code fülle:
Delphi-Quellcode:
procedure TListeBuchungen.queryCalcFields(DataSet: TDataSet);
begin
inherited;
with qAdressen do
begin
close;
parambyname('ADRNR').asstring := dataset.fieldbyname('ADRNR').asstring;
open;
end;
dataset.fieldbyname('NAME').asstring := qAdressenName.asstring;
dataset.fieldbyname('VORNAME').asstring := qAdressenVorname.asstring;
end;
wie filtere ich nun nach diesen berechneten Feldern???
|
|
Zitat
|