Entwickler-Ecke

Datenbanken - Suchen mit Locate


pmw - Mo 30.12.02 13:56
Titel: Suchen mit Locate
Hallo!

Ich möchte gerne alle Felder eine Datenbank nach einen bestimmten Schlüsselwort durch suchen. Leider bekomme ich immer com Compiler die Fehlermeldung, dass VarArrayOf ein undefinierter Wert sei. Wenn ich VarArrayOf einfach weglassen und nur "suchen.Text" hin schreibe, dann gibt es einen Laufzeitfehler.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
var
y,x: integer;
begin

   if Table1.Locate('Sänger;Titel;CD;Track;Bemerkung', VarArrayOf([suchen.Text]), [loCaseInsensitive,loPartialKey]) then
      ShowMessage('Datensatz gefunden.');

end;


Viele Grüße
Martin Winandy


bis11 - Mo 30.12.02 14:22

Hi,

was für einen Typ Datenbank benutzt Du denn ?


pmw - Mo 30.12.02 15:10

Paradox 7


Udontknow - Mo 30.12.02 15:21

Hi!

Du hast höchstwahrscheinlich einfach vergessen, die Unit Variants in der Uses-Klausel zu deklarieren. In ihr ist die Funktion VarArrayOf implementiert. :wink:

Cu,
Udontknow


Udontknow - Mo 30.12.02 15:24

Wo ich mir gerade den Code anschaue:

Du musst für jedes Feld ein entsprechendes Element angeben, also:


Quelltext
1:
VarArrayOf([SaengerText,TitelText,CDText,TrackText,BemerkungText])                    


Cu,
Udontknow


pmw - Mo 30.12.02 16:01

Hallo!

Der Compiler meldet aber imm noch die selbe Fehlermeldung:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
[Fehler] Unit1.pas(50): Undefinierter Bezeichner: 'VarArrayOf'
[Fehler] Unit1.pas(50): Ordinaltyp erforderlich
[Fehler] Unit1.pas(50): Inkompatible Typen: 'Integer' und 'TCaption'
[Fehler] Unit1.pas(50): Inkompatible Typen: 'Integer' und 'TCaption'
[Fehler] Unit1.pas(50): Inkompatible Typen: 'Integer' und 'TCaption'
[Fehler] Unit1.pas(50): Inkompatible Typen: 'Integer' und 'TCaption'
[Fehler] Unit1.pas(50): Inkompatible Typen: 'Integer' und 'TCaption'
[Fataler Fehler] Archiver.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden



Quelltext
1:
2:
if Table1.Locate('Sänger;Titel;CD;Track;Bemerkung', VarArrayOf([suchen.Text,suchen.Text,suchen.Text,suchen.Text,suchen.Text]), [loCaseInsensitive,loPartialKey]) then
      ShowMessage('Datensatz gefunden.');


Udontknow - Mo 30.12.02 16:18

Die Unit "Variants" ist in der Uses-Klausel?

Wenn nicht sicher, bitte einmal die ganze Unit posten...

Cu,
Udontknow


pmw - Mo 30.12.02 16:24

Zitat:
Die Unit "Variants" ist in der Uses-Klausel?

Daran lag's!

Locate macht immer nur eine UND-Suche. Ich benötige aber eine ODER-Suche. Was muss ich ändern?


Udontknow - Mo 30.12.02 16:29

Mit Locate gehts nicht. An deiner Stelle würde ich eine Query nehmen und ein entsprechendes SQL-Statement zusammenbasteln.

Cu,
Udontknow