Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ein Suchbegriff in mehreren Feldern finden (https://www.delphipraxis.net/10179-ein-suchbegriff-mehreren-feldern-finden.html)

Tyler 13. Okt 2003 10:04


Ein Suchbegriff in mehreren Feldern finden
 
Hello Again :)

folgendes:

Table.Locate('feld1', Suchstring, [loPartialKey]);

findet ja im Feld1 den Suchstring auch wenn er nur ein Teil des Feldinhalts darstellt, wie jedoch finde ich meinen Suchstring in mehr als einem Feld?

Theoretisch ja so (laut Delphi-Hilfe):

Table.Locate('feld1;feld2', Suchstring, [loPartialKey]);

Das führt aber zu folgendem Fehler:
... raise exception class EVariantInvalidArgError with message "Invalid Argument" ...

Hm, gut, hab ich es also mal so probiert (streng nach Delphi-Hilfe):

Table.Locate('feld1;feld2', VarArrayOf([Suchstring, Suchstring]), [loPartialKey]);

Passiert natürlich garnichts... logisch...

Meine Frage also nun: Wie lokalisiere ich einen Suchbegriff in mehreren Feldern?

vielen Dank schonmal im Vorraus
mfG

APP 13. Okt 2003 11:23

Re: Ein Suchbegriff in mehreren Feldern finden
 
Hallo,

so auf die Schnelle würde ich SQL empfehlen,
aber bei Locate würde ich vermuten, dass die
Felder Schlüsselfelder und vom gleichen Typ sein müssen.

Gib uns ein paar Infos zur DB, den Feldtypen und dem Inhalt.

Nach kurzem Test mit DBdemos kommt doch noch was:

Delphi-Quellcode:
Table1.Locate('NAME;AREA', VarArrayOf(['House Cat', 'New Orleans']), [loPartialKey]);

Tyler 13. Okt 2003 12:37

Re: Ein Suchbegriff in mehreren Feldern finden
 
also zur Datenbank:

Ich benutz das alte DBaseIII+ Format, bei den beiden Feldern handelt es sich einmal um ein Textfeld und einmal um ein Integerfeld, ich hab´s auch schon mit 2 gleichen Feldern versucht, führt zur gleichen Fehlermeldung wenn ich nur einen Suchstring angebe.

Die Zeile von dir hab ich ja wie gesagt schon probiert, führt zwar zu keiner Fehlermeldung, ergibt aber auch kein Suchergebnis... ich denk mal wenn ich ein VarArrayOf angebe, müssen beide Suchbegriffe gleichzeitig vorkommen (UND-Verknüpft), ich brauch aber eine ODER-VErknüpfung...

... und SQL möcht ich unter gar keinen Umständen benutzen... wirklich :)

danke erstma
mfG

Memo 13. Okt 2003 12:54

Re: Ein Suchbegriff in mehreren Feldern finden
 
Zitat:

Zitat von APP
aber bei Locate würde ich vermuten, dass die
Felder Schlüsselfelder und vom gleichen Typ sein müssen.

Nein müssen sie nicht.
Zitat:

ich brauch aber eine ODER-VErknüpfung
Du erhälst ja eine Rückgabe über gefunden bzw. nicht gefunden. Dann machs doch mal so:
Delphi-Quellcode:
if (Table.Locate('feld1', VarArrayOf([Suchstring]), [loPartialKey])) or
   (Table.Locate('feld2', VarArrayOf([Suchstring]), [loPartialKey]))then
   begin
   ...

APP 13. Okt 2003 12:55

Re: Ein Suchbegriff in mehreren Feldern finden
 
Hallo Tyler,

Zitat:

ich brauch aber eine ODER-VErknüpfung...
davon war aber bei Deiner 1. Fragestellung nie die Rede!

IMHO würde ich meinen, dass Locate nur dann funkt, wenn alle Kriterien erfüllt sind
Zitat:

OH: Locate returns true if a record is found that matches the specified criteria and that record is now active
und dann nur einen Datensatz zurückliefert.

Alternativ könntest Du ja mit "Filter" arbeiten, da bekommst Du
Datenmengen zurück.
Suche mal nach Hier im Forum suchenFilter Datenbank hier im Forum.

P.s. Warum wehrst Du Dich so gegen SQL? :gruebel:
Damit hättest Du alle Möglichkeiten :mrgreen:

APP 13. Okt 2003 12:58

Re: Ein Suchbegriff in mehreren Feldern finden
 
Hallo Memo,
Zitat:

Zitat von Memo
Delphi-Quellcode:
if (Table.Locate('feld1', VarArrayOf([Suchstring]), [loPartialKey])) or
   (Table.Locate('feld2', VarArrayOf([Suchstring]), [loPartialKey]))then
   begin
   ...

Damit bekommt er nur den ersten gefundenen Datensatz zurück (z.B. von Feld1),
auch wenn beide Locate-Kriterien erfüllt sind.

Memo 13. Okt 2003 13:27

Re: Ein Suchbegriff in mehreren Feldern finden
 
Hallo App,
Zitat:

Zitat von APP
Damit bekommt er nur den ersten gefundenen Datensatz zurück (z.B. von Feld1),
auch wenn beide Locate-Kriterien erfüllt sind.

Oder nur eine. Was hast du sonst erwartet? Er wollte es doch genauso haben, oder hab ich was überlesen? Ebend "or".
Zitat:

P.s. Warum wehrst Du Dich so gegen SQL?
Damit hättest Du alle Möglichkeiten
IMHO, locate in dem Fall auch reicht!?
Und, korrigier mich rühig, aber ich lese nichts über mehrere Datensätze die zurückgegeben werden sollen. Also wozu braucht er jetzt den Filter(bezogen auf die Fragestellung)?

Tyler 13. Okt 2003 13:55

QLRe: Ein Suchbegriff in mehreren Feldern finden
 
Aaaalso, erstmal vielen Dank für eure Bemühungen:

Warum kein SQL?

ICh hab das schon öfter mal beschrieben, u.a. gerade erst hier:
http://www.delphipraxis.net/internal...ct.php?t=11346

Das hat wirklich nichts mit Ignoranz zu tun, ich kann eine gefilterte Datenmenge aus SQL hier einfach nicht gebrauchen, siehe eben meine Erklärung im o.g. Thread ;)

Zitat:

Du erhälst ja eine Rückgabe über gefunden bzw. nicht gefunden.
Leider nicht, suche ich nur in einem DB-Feld, was ja soweit gut funktioniert, springt er eben direkt zum Datensatz... aber egal, soll nicht zum Gegenstand einer Diskussion werden :shock: :D

Zitat:

if (Table.Locate('feld1', VarArrayOf([Suchstring]), [loPartialKey])) or
(Table.Locate('feld2', VarArrayOf([Suchstring]), [loPartialKey]))then
begin
Das bringt mich ja leider nicht weiter, weil, mal als Beispiel:
Der gesuchte Datensatz befindet sich in feld1 an 10. Stelle und in feld2 an 5. Stelle,
mit der Abfrage oben würde ich ja jetzt auf den Datensatz in 10. Stelle springen, und den viel früher verfübaren Datensatz in feld2 völlig ausser Acht lassen und somit vllt sogar vergessen.... nicht sehr praktisch :)

Achja, und ich brauch schon einen Datensatz der zurückgegeben wird, und zwar möchte ich, wie man es von der allgemeinen Suchfunktion (Strg+F) her kennt, das der Zeiger auf diesen Datensatz springt, ein Filter hilft hier, wie schon erwähnt, nicht weiter, weil dann kann ich ja auch SQL benutzen ;)

mfG und Danke soweit :)

Memo 13. Okt 2003 14:29

Re: Ein Suchbegriff in mehreren Feldern finden
 
Also machen wir noch einen Versuch:
Delphi-Quellcode:
var x,y : Integer;
begin
  if Table.Locate('feld1', 'Suchstring', [loPartialKey]) then
     x := Table.RecNo;
  if Table.Locate('feld2', 'Suchstring', [loPartialKey]))then
     y := Table.Recno;
  if (x=0) and (y = 0) then ShowMessage('nix gefunden') else
  begin
    if (y < x) and (y<>0) then
      Table.RecNo := y else
    if (x < y) and (x <> 0) then
      Table.RecNo := x;
  end;

Tyler 13. Okt 2003 14:50

Re: Ein Suchbegriff in mehreren Feldern finden
 
hmm.. verdammt, das klingt sehr einfach, ich hoffe jetzt kommt nicht der Gedanke auf, ich war nur zu faul n Algorithmus zu suchen... ich dachte es gibt dafür ne strenge Befehlsdefinition.. nagut, also vielen Dank für den Code memo :)

mfG


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr.
Seite 1 von 2  1 2      

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