Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi RecordSet.Find auf mehrere Felder (https://www.delphipraxis.net/70365-recordset-find-auf-mehrere-felder.html)

egal 29. Mai 2006 13:03

Datenbank: Access • Version: 2000 • Zugriff über: ADODB_TLB._Recordset

RecordSet.Find auf mehrere Felder
 
Weil alles schneller sein soll, muss ich statt ADoDataSet RecordSet verwenden. Nach Startschwierigkeiten komme ich eigentlich ganz gut zurecht, aber wie man ADODataSet.Locate auf 2 oder mehrere Felder ersetzen kann, das weiß ich immer noch nicht. Mit einem Feld klappt's so:
Delphi-Quellcode:
 
var Tabl: _RecordSet;
Tabl.Find('FeldName' +'='''+cText+'''', 0, adSearchForward, 0);
if not Tabl.EOF then ...
Für einen Tipp wäre ich dankbar!

marabu 29. Mai 2006 13:35

Re: RecordSet.Find auf mehrere Felder
 
Hallo du Ärmster.

Zitat:

Zitat von egal
aber wie man ADODataSet.Locate auf 2 oder mehrere Felder ersetzen kann, das weiß ich immer noch nicht.

On a clear disk you can search forever - oder mit den Worten von Microsoft:

MS schreibt im PSDK zum Thema ADO Find method
Only a single-column name may be specified in criteria. This method does not support multi-column searches.

Das könnte eine Erklärung sein - oder? Bei mehreren Suchkriterien wirst du rekursiv suchen müssen, denke ich.

Nachtrag: wenn nur indizierte Spalten durchsucht werden, dann könnte dir die Methode Seek() gefallen.

Grüße vom marabu

egal 29. Mai 2006 15:01

Re: RecordSet.Find auf mehrere Felder
 
Zitat:

Zitat von marabu
Bei mehreren Suchkriterien wirst du rekursiv suchen müssen, denke ich.

Tja, wenn man rekursiv suchen muss, dann wird Locate-Methode von ADODataSet sogar schneller oder?

Zitat:

Zitat von marabu
wenn nur indizierte Spalten durchsucht werden, dann könnte dir die Methode Seek() gefallen.

Nicht unbedingt, da können auch nicht indizierte Spalten durchgesucht werden.
Ok, ich habe zuerst ObjectRecord nur da verwendet, wo Locate nur für ein Feld war, vielleicht reicht's :P

Kedariodakon 29. Mai 2006 15:11

Re: RecordSet.Find auf mehrere Felder
 
Delphi-Quellcode:
function Locate(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean; override;

// ...

KeyFields := 'ID;Name';
KeyValues := VarArrayOf( [ MeinIdWert, MeinNameWert ] )
Bye Keda

egal 29. Mai 2006 15:33

Re: RecordSet.Find auf mehrere Felder
 
Zitat:

Zitat von Kedariodakon
Delphi-Quellcode:
function Locate(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean; override;

// ...

KeyFields := 'ID;Name';
KeyValues := VarArrayOf( [ MeinIdWert, MeinNameWert ] )
Bye Keda

Danke für deine Mühe, aber du hast die Frage nicht richtig verstanden. RecordSet kennt die Function Locate nicht, deswegen musste ich RecortSet.Find verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:08 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