Problem beim suchen in einer Query
-
Hallo Zusammen,
ich möchte in ein Edit-Feld einen Suchbegriff eingeben und danach wird in einer MySQL-Datenbank gesucht.
Ausgegeben wird das Ergebniss in einem DBGrid. Ich möchte jetzt, dass der erste Datensatz der den Suchbegriff enthält im DBGrid markiert ist. Also das zu dem Datensatz gesprungen wird.
Momentan versuche ich es folgender maßen://SQL Abfrage füllen AnsiString sql_select = "SELECT * from artikel order by kunde, artikelnr"; DataModule1->sql_artikel_suchen->SQL->Clear(); DataModule1->sql_artikel_suchen->SQL->Add(sql_select); DataModule1->sql_artikel_suchen->Execute(); DataModule1->sql_artikel_suchen->Locate("bezeichnung", Ebezeichnung_suchen->Text,TLocateOptions() << loPartialKey << loCaseInsensitive);Wenn ich es so mache, wird aber immer der erste Datensatz markiert. Was mache ich da falsch?
Danke im voraus
-
hi,
ich mache die sql abfrage über eine ado-query.
folgenden code für das onchange ereignis des edit feldes eingeben:
query->Locate("titel",txt_suche->Text,TLocateOptions() << loPartialKey << loCaseInsensitive);dann sollte es funzen.
-
Bei mir soll die Locate Suche nach einem Button-Click ausgeführt werden. Nicht beim OnChange des Edit-Feldes.
Wenn ich es richtig sehe nutze ich doch die gleiche Zeile wie du oder nicht?
-
Die Zeilen vor dem Locate brauchst Du alle nicht (die Abfrage muß natürlich aktiv sein).
Das Locate mußt Du auf das Query anwenden, welches mit dem DBGrid verknüpft ist. Locate gibt Dir auch einen Rückgabewert, ob der Datensatz gefunden wurde, oder nicht.Die Zeile mit dem Execute ist dort völlig deplaziert. Was soll sie bezwecken?
-
Habe es jetzt hinbekomme. Die Query war nicht activ.

@Joe_M.
Das Execute ist dafür da, damit die Abfrage die ich oben angebe, ausgeführt wird. Ist das denn falsch?
-
Ja.
Bei Execute wird Dir keine Datenmenge zurückgeliefert, sondern einfach nur die Anweisung ausgeführt. Execute eignet sich für z.B. für INSERT- oder UPDATE-Statements, aber nicht für SELECT-Statements.
Bei SELECT-Statements mußt Du zwingend Open() verwenden.