Einzelnen Beitrag anzeigen

kerim80

Registriert seit: 16. Jun 2005
9 Beiträge
 
#1

zu langsamer select! warum??

  Alt 5. Jul 2005, 19:38
Datenbank: Firebird • Zugriff über: IBConsole
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
  Mit Zitat antworten Zitat