AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken vergleichbaren SQL-Befehl für "Locate"
Thema durchsuchen
Ansicht
Themen-Optionen

vergleichbaren SQL-Befehl für "Locate"

Ein Thema von Crowbar · begonnen am 7. Jul 2014 · letzter Beitrag vom 7. Jul 2014
Antwort Antwort
mkinzler
(Moderator)

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

AW: vergleichbaren SQL-Befehl für "Locate"

  Alt 7. Jul 2014, 14:29
Locate funktioniert auch mit SQL-Datenquellen. Es wird ja nur in der Ergebnismenge gescrollt was u.U. überhaupt keinen Zugriff auf den Server bedarf.
Markus Kinzler
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#2

AW: vergleichbaren SQL-Befehl für "Locate"

  Alt 7. Jul 2014, 14:37
Locate funktioniert auch mit SQL-Datenquellen. Es wird ja nur in der Ergebnismenge gescrollt was u.U. überhaupt keinen Zugriff auf den Server bedarf.
Das trifft bei einer clientseitigen Cursor Location zu.
Falls er einen serverseitigen Cursor verwendet erfolgt auch bei jedem Datensatzwechsel ein Serverzugriff, was durchaus alles andere als performant sein kann.
Jetzt wären durchaus Zusatzinformationen angebracht. Welche Datenbank / Version/ Zugriff über ?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: vergleichbaren SQL-Befehl für "Locate"

  Alt 7. Jul 2014, 14:40
Ich schrieb u.U. Und auch bei einem serverseitigen Cursor, wird nur gefetcht, wenn noch nicht auf dem Client vorhanden.
Markus Kinzler
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

AW: vergleichbaren SQL-Befehl für "Locate"

  Alt 7. Jul 2014, 14:52
War doch nicht persönlich gemeint, und nur als kleine Ergänzung.
Ich habe gerade gesehen, dass er Dbase Files verwendet. Da ist das Cursorlocation Thema vermutlich ohnehin vom Tisch.
clUseServer bewegt den Datensatzzeiger bei jeder Prior/Next/Locate Operation durch die serverseitige Datemnenge.
Mit dem Fetch hängt das eigentlich nicht direkt zusammen.
Serverseitige Cursur verwendet man z.B. um in Client Server Applicationen an jedem Client mitzubekommen, ob Datensätze durch andere User hinzugefügt oder gelöscht wurden.

Aber, wie gesagt.... DBF. Das Thema ist kalter Kaffee.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.921 Beiträge
 
Delphi 13 Florence
 
#5

AW: vergleichbaren SQL-Befehl für "Locate"

  Alt 7. Jul 2014, 14:44
Jetzt wären durchaus Zusatzinformationen angebracht. Welche Datenbank / Version/ Zugriff über ?
Das steht interessanterweise im 1. Post:

Zitat:
Datenbank: dbf • Version: x • Zugriff über: TTable, TDatasource
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#6

AW: vergleichbaren SQL-Befehl für "Locate"

  Alt 7. Jul 2014, 14:53
Ja, Uwe. Habe es entdeckt. War nur nicht so schnell mit dem Tippen ...
  Mit Zitat antworten Zitat
Crowbar

Registriert seit: 17. Jun 2002
43 Beiträge
 
#7

AW: vergleichbaren SQL-Befehl für "Locate"

  Alt 7. Jul 2014, 15:02
Danke für die ganzen Antworten ... wieder etwas gelernt.

Derzeitig habe ich
Delphi-Quellcode:
...
DBKundenTable.Locate('KUNDE','Musterfirma',[loCaseInsensitive,loPartialKey]);
...
verwendet. Hier traten manchmal die Performanceprobleme auf, wenn gleichzeitig ein weiterer Benutzer auf die Datenbank zugriff.

Derzeitig teste ich es mit der "TQuery" - Komponente.
Delphi-Quellcode:
...
KundenQuery.Locate('KUNDE','Musterfirma',[loCaseInsensitive,loPartialKey]);
...
Kann man sagen, dass die Ausführung des "Locate"-Befehls mittels "TQuery" schneller ist, als über "TTable"?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: vergleichbaren SQL-Befehl für "Locate"

  Alt 7. Jul 2014, 15:08
Nein, das dürfte theoretisch keinen Unterschied machen.
Markus Kinzler
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#9

AW: vergleichbaren SQL-Befehl für "Locate"

  Alt 7. Jul 2014, 15:22
Die Query und die Table arbeiten grundsätzlich gleich. Sie holen sich standardmäßig alle Datensätze aus einer Tabelle/Abfragedatenmenge in den RAM. Daher sind sie auch grundsätzlich gleich schnell. Bei der Query hast Du jedoch den Vorteil, dass Du die Anzahl der gefetchten Datensätze per WHERE Klausel auf das Notwendige beschränken kannst. Zudem kannst Du die abzurufenden Felder (Spalten) einschränken. (Statt SELECT * FROM die tatsächlich benötigten Feldnamen angeben). Das kann unter dem Strich viel ausmachen.

TTable und TQuery hatten glaube ich eine "UniDirectional" Property.
Hast Du die auf True gesetzt?
Damit kann Deine Suche z.B. vom aktuellen Datensatz direkt zum Anfang springen und eine neue Suche beginnen.
Oder rückwärts navigieren oder .... Vieles mehr.
Das bringt u.U. schon viel.
Falls UniDirectional auf False steht, wird die geftechte Datenmenge immer vom aktuellen Datensatz bis zum Ende durchlaufen. Erst dann beginnt die neue Suche, beginnend vom ersten Datensatz.
Gerade bei großen Tabellen macht sich das unidirektionale Verhalten positiv bemerkbar.

Geändert von jensw_2000 ( 7. Jul 2014 um 15:34 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:11 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