Einzelnen Beitrag anzeigen

kerim80

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

Re: zu langsamer select! warum??

  Alt 7. Jul 2005, 21:29
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
  Mit Zitat antworten Zitat