Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Locate findet nix (https://www.delphipraxis.net/200095-locate-findet-nix.html)

wurzelsepp1 19. Mär 2019 12:38

Datenbank: IB • Version: 13.3 • Zugriff über: IBTable

Locate findet nix
 
Moin Experten :)

Nach einigen Jahren mache ich mal wieder etwas mit Delphi und bin gleich auf ein Verständnisproblem gestoßen:

Ich suche mit Table.Locate einen Substring. Die Methode finde den aber prinzipiell nicht, trotzdem er vorhanden ist.

Hier ein Beispiel:

Feld: "IP"
Inhalt: "1.2.3.0/24"

Nun will ich nach dem ersten Feld suchen, das die ersten drei Ziffern der Adresse enthält:

T.Locate('IP', '1.2.3', [lopart..

Ergebnis: false

Ein SQL mit Platzhaltern findet alles Ähnliche, ist aber zu langsam und unpräzise.

Wie macht man das richtig?

Danke & VG :)

hoika 19. Mär 2019 14:33

AW: Locate findet nix
 
Hallo,
Zitat:

Ein SQL mit Platzhaltern findet alles Ähnliche, ist aber zu langsam und unpräzise.
IBQuery benutzen
Starting With benutzen
Index auf das Feld IP setzen

PS:
Was passiert, wenn du mal den vollständigen Feldinhalt suchst,
dann auch ohne das foPartialKey.

haentschman 19. Mär 2019 14:55

AW: Locate findet nix
 
Moin...:P
Zitat:

Ein SQL ... ist aber zu langsam und unpräzise.
...habe ich noch nie gehört. :gruebel:

mkinzler 19. Mär 2019 15:13

AW: Locate findet nix
 
Zitat:

Ein SQL mit Platzhaltern findet alles Ähnliche, ist aber zu langsam und unpräzise.
Ein TQuery auf eine SQL-Datenbank (wie z.B. InterBase) ist eine TQuery in der Form
SQL-Code:
select * from <tabelle>;
In diesem Fall ist SQL eigentlich immer schneller und besser, da das DBMS, welches sich dann um die Abfrage kümmert, dafür optimiert ist.

hoika 19. Mär 2019 15:51

AW: Locate findet nix
 
Hallo,
nicht immer,
das IBTable.Locate macht intern auch eine SQL-Abfrage.

Aber:
Information at your fingertips.

Bei mir geht keine Query-Abfrage ohne Prüfung raus zum Kunden.

mkinzler 19. Mär 2019 16:04

AW: Locate findet nix
 
Ohne im Detail geschaut zu haben, glaube ich eher nicht, das ein locate eine neue Abfrage absendet. Es wird ja "nur" der datensatzzeiger in der lokalen Kopie der Daten verschoben. Bei einer Lookup schon eher (oder nur einen lokalen Filter).

Grundsätzlich werden alle Aktionen, welche eine Verbindung zum DBMS benötigen (Refresh, Insert/Update/Delete, ..) in SQL-Statements umgesetzt und vom DBMS ausgeführt. Diese sind in der Regel allgemeiner, als händisch zum Problem bezogen geschriebene.

hoika 19. Mär 2019 16:08

AW: Locate findet nix
 
Hallo,
Zitat:

Ohne im Detail geschaut zu haben
Habe ich aus der Online-Doku ;)
Aber ich glaube das auch erst, wenn da ein SQL-Monitor mitläuft.

wurzelsepp1 20. Mär 2019 17:58

AW: Locate findet nix
 
IBQuery benutzen
Starting With benutzen
Index auf das Feld IP setzen

PS:
Was passiert, wenn du mal den vollständigen Feldinhalt suchst,
dann auch ohne das foPartialKey.[/QUOTE]

Also das habe ich nu probiert und er findet auch das nicht - trotzdem ein passender Datensatz vorhanen ist.

Das Feld in der Datenbank ist vom Typ char und länger als der Suchstring. Könnte der Fehler in einer unterschiedlichen Stringbehandlung liegen?
Muss ich evtl. nach etwas Anderem (z.B. folgenden Leerzeichen) suchen?

hoika 20. Mär 2019 19:09

AW: Locate findet nix
 
Hallo,
hast du Starting With probiert?

hoika 20. Mär 2019 19:10

AW: Locate findet nix
 
Hallo,
Zitat:

trotzdem ein passender Datensatz vorhanen ist
Wohl eher nicht.
Kann es sein, dass der Datensatz mit Leerzeichen gespeichert wurde?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:49 Uhr.
Seite 1 von 5  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz