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
DasWolf

Registriert seit: 7. Jun 2016
76 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

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

  Alt 2. Aug 2019, 10:29
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.
Wie sieht denn Dein Locate in voller Länge aus?

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.
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.
Naja, um nicht ständig den Datenbankserver zu "nerven", sollte man folgende Instrumente niemals aus den Augen verlieren:
  • Locate
  • Filter
  • CachedUpdates=True
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

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

  Alt 2. Aug 2019, 10:44
Moin...
Zitat:
Naja, um nicht ständig den Datenbankserver zu "nerven", sollte man folgende Instrumente niemals aus den Augen verlieren:
...dem widerspreche ich. Warum soll ich mir die komplette "Tabelle" laden um mir den passenden DS rauszusuchen? Mit einer einfachen Abfrage holt man sich das was man möchte zu dem Zeitpunkt wann man es braucht.

Zitat:
Locate ist ein Fossil aus den Tagen von Paradox und dBase und TTable, das sollte man meiner Meinung nach nicht mehr verwenden.
+
  Mit Zitat antworten Zitat
exilant

Registriert seit: 28. Jul 2006
134 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 2. Aug 2019, 10:57
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.

Auch das editieren von Datasets mit edit/append/insert/post halte ich für übel.
Ich verstehe auch nach wie vor nicht, warum es Firedac u.ä.aufwendige Data Access Frameworks gibt. Das, was man wirklich brauchen könnte (ORM) leistet es nicht. Und der Rest wie das editieren von Datasets, "Live"-Querys, cached updates u. ä. sind übel. Eine leichtgewichtige direkte Verbindung zur Datenbank ist alles was man braucht: insert, update, delete. Und ein unidirektionaler Cursor auf eine Datenmenge, geliefert von einem Query.
Aber das ist nur meine Meinung.
Anything, carried to the extreme, becomes insanity. (Exilant)
  Mit Zitat antworten Zitat
jobo

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

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

  Alt 2. Aug 2019, 11:23
Ich denke der Hinweis von mkinzler ist genau richtig, wenn auch knapp.

Und ich verstehe nicht, warum ein Locate verboten sein soll. Der Anwendungsfall, bei dem in einem Dateset auf einen bestimmten Datensatz gesprungen wird (werden soll) ist doch hier niemand bekannt.

Wieso wird sowas immer gleich so niedergemacht. Filter ist etwas anderes als Locate, Query mit Where Clause sowieso.

Wieso kann man nicht fragen, was gewollt und bekannt ist, statt zu behaupten, das sei alles falsch.

Und wenn ein Locate nicht funktionieren sollte, der Anwendungsfall aber diese Funktion benötigt, würde man wohl darüber schreiben müssen, wie man es nachbaut.
Gruß, Jo
  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, 11:36
Also ursprünglich war das mal eine TTable und man konnte mit dem DBNavigator in der Datenmenge vor- und zurückblättern, editieren, usw.
Dafür brauche ich doch die kompletten Datensätze, oder nicht?

Aber da es natürlich durch einfach blättern von Datensatz zu Datensatz zu mühselig/langwierig für die Anwender ist zu einem bestimmten Datensatz zu gelangen, mache ich auf Knopfdruck ein Suchfenster auf, wo der Anwender seine Suchparameter eingeben kann, wobei ich schon bei der Eingabe eine Ergebnismenge im Suchfenster anzeige. Klickt der Anwender dann auf eine Datensatz in der Ergebnismenge nehme ich mir den PI und will damit auf den DS im Adressdialog zu positionieren. Früher als noch TTable war per FindKey, später als es auf TQuery umgestellt war mit Locate.

Und das ging auch recht gut bis jetzt aufgefallen ist, das ...

- bei der Datenmenge, die für die Anwender nach Namenfeld sortiert ist, der PI 749 in der Datenmenge vor 74 liegt.
z.B.
PI Name
749 Hugo
..
..
74 Klaus

der Locate sieht so aus ...
Code:
      Locate('Adress_ID', StrToInt(aID), [loPartialKey]);
Da das Eingabefeld für den Suchbegriff ein alphanumerisches Feld ist, wandele ich es hier mit StrToInt um, aber das scheint locate nicht zu interessieren und positioniert deshalb auf "749 Hugo".

Ich hoffe, ich konnte hiermit verständlicher machen, in welcher Weise ich hier vorgehe. Mir wurde immer gesagt, viele Wege führen nach Rom.
Wenn der Ansatz falsch ist, wäre dankbar für eine kurze Beschreibung der richtigen Herangehensweise.
Micha
Ich habe fertig!

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

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

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

  Alt 2. Aug 2019, 11:38
"Verboten" hab ich nirgendwo gesehen. Aber es ist schon die Frage was eigentlich erreicht werden soll.
Wenn z.B. alle Kunden in Mannheim zur Auswahl stehen sollen, würde ich es so lösen, daß ich zuerst die Kundennamen+ID hole und dann, nach der Auswahl, an hand der ID die vollständigen DatenSätze für das Edit.
Wenn es sich aber um eine Hand voll Datensätze handelt die man vollständig mit sich schleppen kann, dürfte der Weg über Locate oder ähnliches wohl effizienter sein.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  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 13:56 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