Hallo,
ich habe eine Liste-Buchungen mit Filtern und sortieren der einzelnen Spalten(ASC und DESC).
So, ich verwende den folgenden Code aber dieser dauert schon 3 sek. bei 10 Datensätzen
und wenn ich das
SQl-Statement in der IBConsole eingebe dauerts 0 sek und paar gequetschte:
SO SIEHT ES IN DER IBCONSOLE MIT 7 DATENSÄTZEN AUS:
Execution Time(hh:mm:ss.ssss) 00:00:00.0040
Prepare Time (hh:mm:ss.ssss) 00:00:00.0060
Plan PLAN SORT (JOIN (B NATURAL, A INDEX(ADRESSENINDEX1)))
UND DAS IST DER DELPHI-CODE
Delphi-Quellcode:
function TListeBuchungen.GetSql:
string;
var i: integer;
s, sFilter, sPattern:
string;
begin
query.sql.clear;
query.sql.add('
SELECT ');
query.sql.add('
B.BUCHUNGLFDNR, ');
query.sql.add('
B.LFDNR, ');
query.sql.add('
B.BUCHUNGNR, ');
query.sql.add('
B.TICKETNR, ');
query.sql.add('
B.ADRNR, ');
query.sql.add('
B.VERANSTALTER, ');
query.sql.add('
B.HINABFLUGDATUM, ');
query.sql.add('
B.HINABFLUGZEIT, ');
query.sql.add('
B.HINABFLUGORT, ');
query.sql.add('
B.HINANKUNFTORT, ');
query.sql.add('
B.HINFLUGNR, ');
query.sql.add('
');
query.sql.add('
B.RUECKABFLUGDATUM, ');
query.sql.add('
B.RUECKABFLUGZEIT, ');
query.sql.add('
B.RUECKABFLUGORT, ');
query.sql.add('
B.RUECKANKUNFTORT, ');
query.sql.add('
B.RUECKFLUGNR, ');
query.sql.add('
');
query.sql.add('
B.NETTOPREIS, ');
query.sql.add('
B.ANZAHLUNG, ');
query.sql.add('
B.TAX, ');
query.sql.add('
B.MWST, ');
query.sql.add('
B.RABATT, ');
query.sql.add('
B.GEWINNPROZENT, ');
query.sql.add('
A.NAME, ');
query.sql.add('
A.VORNAME ');
query.sql.add('
');
query.sql.add('
FROM BUCHUNGEN B, ADRESSEN A ');
query.sql.add('
WHERE EXTRACT (YEAR FROM B.HINABFLUGDATUM) = ' +#39+ CBYear.Items.Strings[CBYear.itemindex] + #39 );
query.sql.add('
AND B.ADRNR = A.ADRNR ');
query.sql.add('
%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;
VIELEN DANK