Hallo zusammen,
ich danke euch allen für eure bemühungen mir zu helfen, es waren sehr gute anregungen dabei die mir weitergeholfen haben
und habe das problem gelöst
ich habe nicht viel geändert!
das einzige was ich gemacht habe ist das
query.sql.add durch
query.sql.text zu ersetzen. wie folgt
und es ist genauso schnell wie in der IBCoonsole.
Hätte nicht gedacht das es an dem
query.sql.add liegen könnte:
Delphi-Quellcode:
function TListeBuchungen.GetSql:
string;
var i: integer;
s, sFilter, sPattern:
string;
begin
query.sql.clear;
query.sql.text := '
SELECT ' + #10+
'
B.BUCHUNGLFDNR, ' + #10+
'
B.LFDNR, ' + #10+
'
B.BUCHUNGNR, ' + #10+
'
B.TICKETNR, ' + #10+
'
B.ADRNR, ' + #10+
'
B.VERANSTALTER, ' + #10+
'
B.HINABFLUGDATUM, ' + #10+
'
B.HINABFLUGZEIT, ' + #10+
'
B.HINABFLUGORT, ' + #10+
'
B.HINANKUNFTORT, ' + #10+
'
B.HINFLUGNR, ' + #10+
'
' + #10+
'
B.RUECKABFLUGDATUM, ' + #10+
'
B.RUECKABFLUGZEIT, ' + #10+
'
B.RUECKABFLUGORT, ' + #10+
'
B.RUECKANKUNFTORT, ' + #10+
'
B.RUECKFLUGNR, ' + #10+
'
' + #10+
'
B.NETTOPREIS, ' + #10+
'
B.ANZAHLUNG, ' + #10+
'
B.TAX, ' + #10+
'
B.MWST, ' + #10+
'
B.RABATT, ' + #10+
'
B.GEWINNPROZENT, ' + #10+
'
A.NAME, ' + #10+
'
A.VORNAME ' + #10+
'
' + #10+
'
FROM BUCHUNGEN B, ADRESSEN A ' +#10+
'
WHERE EXTRACT (YEAR FROM B.HINABFLUGDATUM) = ' +#39+ CBYear.Items.Strings[CBYear.itemindex] + #39 + #10+
//'WHERE B.HINABFLUGDATUM >= ' +#39 + '01.01.2005' +#39 + ' AND B.HINABFLUGDATUM <= ' +#39 + '31.12.2005' +#39 + #10+
'
AND B.ADRNR = A.ADRNR ' +#10+
'
%s ';
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(
query.SQL.Text, [s]) + ordersql;
end;
Die Filterung in jedem Textfeld mit einem Like-Pattern, bei dem vorne und hinten trunkiert wird, kann bei größeren Tabellen irgendwann zum Laufzeitproblem werden. [marabu]
das stimmt, aber ich warte erstmal ab bis die tabelle ein paar 1000 datensätze hat dann werde ich das
sql-statement ein bisschen verkürzen.
danke nochmals an alle.
bis demnächst
HOSCAKALIN