![]() |
Datenbank: Paradox • Version: 7 • Zugriff über: BDE
Query und FindNearest
Salute,
für die Table gibt es ja die FindNearest Methode. Wie lautet die Methode für die Query? FindNearest gibt es ja nicht und Locate findet ja nur den genauen Datensatz. Bitte um Hilfe.... THX WEBSTER |
Re: Query und FindNearest
Zitat:
Jedes Problem lässt sich auch ohne FindNearest lösen. |
Re: Query und FindNearest
Salute,
die andere Lösung habe ich schon, nur leider dauer die mir zu lange.
Code:
Die Attribute awb und l.auftragnr und a.auftragnr haben bereits einen Index. Leider dauert der Select jeweils (bei jedem Tastaturanschlag) ca 1,5 Sekunden. Und das ist einfach zu lange. Als DB habe ich leider Paradox. Mit mir kommt es immer so vor, als würde der Index nicht genommen.......
procedure TLuftfrachtauftraege_auswahl_Form.auftrag_suchen_EditChange(
Sender: TObject); begin ////////////////////////////////////////////////////////////////////////////// // Alle Luftfrachspeditionsaufträge werden dargestellt str_sql := 'Select a.Auftraggeber,a.Abhol,a.HZiel,a.Liefer,a.LZiel,a.AbholDat1,a.ErledigtAm,a.AuftragsDat,a.RechNr,'; str_sql := str_sql + 'l.awb,l.auftragnr from luftfracht_auftrag l, auftrag a where l.auftragnr= a.auftragnr'; str_sql := str_sql + ' and Upper(AWB) like ' + chr(39) + auftrag_suchen_Edit.Text + '%' + chr(39) + ' '; str_sql := str_sql + ' order by awb;'; Screen.Cursor := crHourglass; tmp_DataSource.DataSet := tmp_query; tmp_query.Close; tmp_query.sql.clear; tmp_query.SQL.Add(str_sql); try tmp_query.Open; except end; tmp_DataSource.DataSet.First; Screen.Cursor := crDefault; end; WEBSTER |
Re: Query und FindNearest
Zitat:
Du arbeitest mit Like-Abfragen und einem Upper auf dem Feld
SQL-Code:
Und Paradox wird dafür keinen passenden Index haben. D.h. evtl. wird einfach ein Full-Table-Scan durchgeführt.
Upper(AWB) like ' + chr(39) + auftrag_suchen_Edit.Text + '%' + chr(39) + ' ';
|
Re: Query und FindNearest
Zitat:
Angenommen die bisherige Eingabe von AWB lautet '398'. Dann wäre die WHERE-Bedingung, die Indexe berücksichtigt:
Delphi-Quellcode:
Parameter :AWB1 wird mit '398' gefüllt; Parameter :AWB2 wird mit '398zzzzzzzzzzzz' gefüllt.
WHERE AWB >= :AWB1 AND AWB <=:AWB2
|
Re: Query und FindNearest
Zitat:
SQL-Code:
benutzen :-)
... and AWB < :AWB2
Und AWB2 würde ich so füllen:
Delphi-Quellcode:
Vorher eventuell noch prüfen ob AWB1 nicht leer ist.
AWB2 := copy(AWB1,1,length(AWB1)-1) + chr(ord(AWB1[length(AWB1)]+1) ;
Like Abfragen sind immer langsam, bieten darüber hinaus aber noch mehr als Findnearest. Damit kannst du auch nach beliebigen Stellen im Feld suchen, und nicht nur nach dem was am Anfang steht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:55 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