AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Auf einen Datensatz in einem Resultset positionieren (Locate)
Thema durchsuchen
Ansicht
Themen-Optionen

Auf einen Datensatz in einem Resultset positionieren (Locate)

Ein Thema von MPirnstill · begonnen am 1. Aug 2019 · letzter Beitrag vom 2. Aug 2019
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#1

Auf einen Datensatz in einem Resultset positionieren (Locate)

  Alt 1. Aug 2019, 16:46
Delphi-Version: 7
Hallo,

ich nutze Delphi, der Datenzugriff geht über SQLDircet auf eine MS SQLServer.

Ich nutze schon eine Weile TSDQuery.Locate, aber es ist mir jetzt klar geworden, dass die Suchkriterien im VarArray-Parameter nicht um den Typ scheren.

Ich suche in einer Adress-Tabelle z.B. über Name, dazu nutze ich eine Select-Anweisung. Aus der Treffermenge kann der Anwender einen Datensatz anklicken auf den ich dann mit Locate in meine Haupt-Resultset (eigentliche alle der Tabelle) um auf den gesuchten DS zu positionieren.
Hier verwende ich natürlich den PI eine ID vom Typ Integer.
Aber da die Datenmenge für die Anwender sinnvollerweise nach Name sortiert ist, steht z.B. die ID 749 vor der ID 74 und Locate scheint das Integer-Feld wie ein Char-Feld zu behandeln und gibt mir schon bei entspr. 749 als Treffer zurück.

Kann ich Locate irgendwie sagen, das ich da in einem Integer-Feld suche und 749 nicht gleich 74 ist?
Oder gibt es eine andere Methode innerhalb eines Resultset auf einen Datensatz zu positionieren?

Früher bei TTable habe ich FindKey benutzt, aber inzwischen ist alles TQuery bzw. TSDQuery.

Vielen Dank für eure Hilfe im Voraus.

Micha
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Auf einen Datensatz in einem Resultset positionieren (Locate)

  Alt 1. Aug 2019, 17:07
das hört sich eher nach der Option loPartialKey an.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#3

AW: Auf einen Datensatz in einem Resultset positionieren (Locate)

  Alt 2. Aug 2019, 11:38
das hört sich eher nach der Option loPartialKey an.
Meinst du damit, das ich loPartialKey hier weglassen soll?

Ich werde das mal ausprobieren. Muss ich aber aufpassen, da ich den Suchdialog auch für andere Dialoge verwende.
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!

Geändert von MPirnstill ( 2. Aug 2019 um 11:41 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Auf einen Datensatz in einem Resultset positionieren (Locate)

  Alt 2. Aug 2019, 12:00
Zitat:
Meinst du damit, das ich loPartialKey hier weglassen soll?
Ja. Bewirkt, dass teilweise Übereinstimmungen erkannt werden.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#5

AW: Auf einen Datensatz in einem Resultset positionieren (Locate)

  Alt 2. Aug 2019, 12:16
Zitat:
Meinst du damit, das ich loPartialKey hier weglassen soll?
Ja. Bewirkt, dass teilweise Übereinstimmungen erkannt werden.
Hab's ausprobiert. Ohne den Parameter findet und positioniert "locate" auf den richtigen Datensatz.
Vielen Dank an alle.


P.S.:
Noch kurz zur Herangehensweise.
Als ich da Programm 1994 geschrieben hab, wo Delphi noch BDE hat und so, hat man doch mit TTable und DBNavigator gearbeitet.
Ist ja auch nur ein kleiner Dialog innerhalb einer größeren Anwendung.
Als ich dann auf TQuery umgestellt hab, hatte ich die im Prinzip nur ausgetauscht und anstelle FindKey dafür Locate verwendet.
Ich das, in dieser Weise wirklich so falsch?
Ich mein unter der Oberfläche könnte ich Anpassungen vornehmen, aber ich weiß nicht, ob ihr das kennt, der Anwender ist ein Gewohnheitstier
und wenn ich die Oberfläche verändere, kommen bestimmt wieder Proteste.
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: Auf einen Datensatz in einem Resultset positionieren (Locate)

  Alt 2. Aug 2019, 12:28
Zitat:
Und ich verstehe nicht, warum ein Locate verboten sein soll...
Wieso wird sowas immer gleich so niedergemacht.
...weil es eben nicht immer funktioniert.

ca. 700.000 Einträge. Die ersten sagen schon alles. ADO hat damit sowieso seine Probleme.
https://www.google.de/search?source=...4dUDCAc&uact=5
Angehängte Grafiken
Dateityp: png Locate.png (34,2 KB, 20x aufgerufen)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: Auf einen Datensatz in einem Resultset positionieren (Locate)

  Alt 2. Aug 2019, 13:46
Noch kurz zur Herangehensweise.
Als ich da Programm 1994 geschrieben hab, wo Delphi noch BDE hat und so, hat man doch mit TTable und DBNavigator gearbeitet.
..
Als ich dann auf TQuery umgestellt hab, hatte ich die im Prinzip nur ausgetauscht und anstelle FindKey dafür Locate verwendet.
Ich das, in dieser Weise wirklich so falsch?
..
Falsch ist m.E. nicht der richtige Ansatz.
Es gibt Probleme, die idR priorisiert werden und es gibt Aufwände, diese Probleme zu beheben.
Wenn die Lösung von mkinzler für Dein Problem funktioniert, scheint es mir einfach sehr effizient zu sein.

Und ich möchte nicht wissen, wie viele alte BDE Programme so umgestellt wurden wie Du es grob beschrieben hast. Es ist nicht unbedingt ideal, aber wer würde sich beschweren, wenn es funktioniert.

Und klar, wenn man etwas nicht ganz besonders richtig macht, fällt es einem irgendwann auf die Füße und tut weh. Mit dem Risiko muss man eben leben.

Jenachdem wen Du fragst, wirst Du eine andere Antwort erhalten.
Gruß, Jo
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
711 Beiträge
 
Delphi 12 Athens
 
#8

AW: Auf einen Datensatz in einem Resultset positionieren (Locate)

  Alt 1. Aug 2019, 17:15
Hallo,

ich nutze Delphi, der Datenzugriff geht über SQLDircet auf eine MS SQLServer.

Ich nutze schon eine Weile TSDQuery.Locate, aber es ist mir jetzt klar geworden, dass die Suchkriterien im VarArray-Parameter nicht um den Typ scheren.

Ich suche in einer Adress-Tabelle z.B. über Name, dazu nutze ich eine Select-Anweisung. Aus der Treffermenge kann der Anwender einen Datensatz anklicken auf den ich dann mit Locate in meine Haupt-Resultset (eigentliche alle der Tabelle) um auf den gesuchten DS zu positionieren.
Hier verwende ich natürlich den PI eine ID vom Typ Integer.
Aber da die Datenmenge für die Anwender sinnvollerweise nach Name sortiert ist, steht z.B. die ID 749 vor der ID 74 und Locate scheint das Integer-Feld wie ein Char-Feld zu behandeln und gibt mir schon bei entspr. 749 als Treffer zurück.

Kann ich Locate irgendwie sagen, das ich da in einem Integer-Feld suche und 749 nicht gleich 74 ist?
Oder gibt es eine andere Methode innerhalb eines Resultset auf einen Datensatz zu positionieren?

Früher bei TTable habe ich FindKey benutzt, aber inzwischen ist alles TQuery bzw. TSDQuery.

Vielen Dank für eure Hilfe im Voraus.

Micha
Was Du da treibst ist nicht die Art, wie man mit einer SQL-Datenbank arbeiten sollte. Anstatt den vom Benutzer markierten Datensatz in einen clientseitigen Dataset zu suchen solltest Du eine neue Query absetzen, die anhand der PI nur den gewählten Datensatz zurückgibt, und dieser Dataset kann dann eventuell editiert werden, oder was Du auch immer damit anstellen willst. Locate ist ein Fossil aus den Tagen von Paradox und dBase und TTable, das sollte man meiner Meinung nach nicht mehr verwenden.

Allerdings: wenn dein "voller" Dataset über eine Query mit einer order by Klausel über die PI erzeugt wurde könnte das Locate sogar funktionieren.
Peter Below
  Mit Zitat antworten Zitat
hoika

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

AW: Auf einen Datensatz in einem Resultset positionieren (Locate)

  Alt 1. Aug 2019, 18:12
Hallo,
also ich habe das mehrfach durchgelesen und trotzdem nicht verstanden ...

Zitat:
steht z.B. die ID 749 vor der ID 74 und Locate scheint das Integer-Feld wie ein Char-Feld zu behandeln und gibt mir schon bei entspr. 749 als Treffer zurück.
Auch bei einem Char-Feld wäre das Locate doch auch falsch!.

Char2="749"
Char1="74"

Where Char="74" darf doch auch hier nicht "749" zurückliefern ...

Ich würde mir mal ein paar Optionen des Locate ansehen und
1. "Filter" benutzen
2. direkte Queries nehmen, also wieder Abfragen zum SQL-Server schicken
3. Umsteigen auf TClientDataSet

Punkt 1 und 3 ergaben sich nach Goggle-Suche "TQuery Locate Error"
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: Auf einen Datensatz in einem Resultset positionieren (Locate)

  Alt 1. Aug 2019, 21:07
Moin...
Zitat:
direkte Queries nehmen, also wieder Abfragen zum SQL-Server schicken
...ich persönlich bin vom Locate (auch MSSQL) weg. Ich hatte auch so Fälle wo z.B. der Datensatz nachweislich existiert hat, aber Locate False ausgewiesen hat. Seit der Umstellung auf Queries (SQL) habe ich die Probleme nicht mehr.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 01:41 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 by Thomas Breitkreuz