![]() |
Datenbank: Firebird • Zugriff über: ibconsole
filter bei berechneten feldern
Hallo zusammen,
habe folgendes Problem: Ich habe eine Buchungsliste die ich mit folgender Funktion filtere.
Delphi-Quellcode:
In dieser Liste habe ich auch berechnete Felder (NAME UND VORNAME) die ich manuell in das query eingefügt habe
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; und in dem OnCalcField-Ereignis mit folgendem code fülle:
Delphi-Quellcode:
wie filtere ich nun nach diesen berechneten Feldern???
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; |
Re: filter bei berechneten feldern
Zitat:
Du kannst dir aber die berechneten Felder sparen und die gewünschten Felder gleich mit einem SQL JOIN erhalten:
SQL-Code:
Ich verwende hier einen LEFT OUTER JOIN, damit keine Datensätze fehlen, falls mal eine Adresse gelöscht worden sein sollte.
SELECT Buchungen.*, adressen.NAME, adressen.VORNAME
FROM Buchungen LEFT OUTER JOIN adressen ON Buchungen.ADRNR=adressen.ADRNR ORDER BY Buchungen.HINABFLUGDATUM Mit dieser Abfrage hast du in der WHERE-Bedingung Zugriff auf alle Felder der Tabellen Buchungen und adressen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz