AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Locate findet nix

Ein Thema von wurzelsepp1 · begonnen am 19. Mär 2019 · letzter Beitrag vom 26. Mär 2019
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
wurzelsepp1

Registriert seit: 9. Dez 2012
107 Beiträge
 
Delphi 3 Professional
 
#1

Locate findet nix

  Alt 19. Mär 2019, 13:38
Datenbank: IB • Version: 13.3 • Zugriff über: IBTable
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Locate findet nix

  Alt 19. Mär 2019, 15:33
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.
Heiko

Geändert von hoika (19. Mär 2019 um 15:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#3

AW: Locate findet nix

  Alt 19. Mär 2019, 15:55
Moin...
Zitat:
Ein SQL ... ist aber zu langsam und unpräzise.
...habe ich noch nie gehört.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Locate findet nix

  Alt 19. Mär 2019, 16:13
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 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.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Locate findet nix

  Alt 19. Mär 2019, 16:51
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.
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Locate findet nix

  Alt 19. Mär 2019, 17:04
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.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Locate findet nix

  Alt 19. Mär 2019, 17:08
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.
Heiko
  Mit Zitat antworten Zitat
wurzelsepp1

Registriert seit: 9. Dez 2012
107 Beiträge
 
Delphi 3 Professional
 
#8

AW: Locate findet nix

  Alt 20. Mär 2019, 18:58
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?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Locate findet nix

  Alt 20. Mär 2019, 20:09
Hallo,
hast du Starting With probiert?
Heiko
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Locate findet nix

  Alt 20. Mär 2019, 20:10
Hallo,
Zitat:
trotzdem ein passender Datensatz vorhanen ist
Wohl eher nicht.
Kann es sein, dass der Datensatz mit Leerzeichen gespeichert wurde?
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:55 Uhr.
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