locate関数について

解決


りな  2010-01-07 08:12:55  No: 36777

たびたびすみません。delphi4のoracle8iを使っています。select文で検索を行った後、その検索したレコードの次のデータをquery.nextをつかって表示できるようにしたいのですが、検索した時点でDBGridにに検索したデータしか表示されないため、query.nextを実行しても反応がなく、次のレコードへ移動しません。そこで、locateを使ってDBGridに全件データが表示された状態で、検索したIDへカーソルを移動しようと思っているのですが、なかなかうまくいきません。このやり方だと、だめでしょうか?

locate('ID', aID.Text, []);
ここでDBGridをオープン ←  ここも、書き方をいろいろと試しているのですが、うまく機能しません。


GTR  2010-01-07 19:22:36  No: 36778

QueryはDataSourceで関連づけされているとして

Query.Active := True;
Query.locate('ID', aID.Text, []);
で動作できますが?
また
Query.First; //最初の行へ
Query.Next;
Query.Next;
Query.Next;
で4行目のデータへ移動できますよ。


HOta  2010-01-07 21:35:18  No: 36779

locateメソッドは、TDatasetに対して発行します。TDBGridはTDatasetの内容を表示しますので、TDatasetが検索結果の場合は、検索結果だけを表示します。その次のレコードは、TDatasetにありませんので表示できません。ですから、query.nextでも、反応がないのは当たり前です。
たとえば、住所録で、市を指定して検索して、数件のレコードを検索しますと、その中から、locateすることはできますが、検索結果にないものをlocateで検索はできません。


HOta  2010-01-08 06:02:04  No: 36780

全件表示してなのですね。
Select * From Table
で全件選択します。
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select * From Table');
Query1.Open;
if Query1.Locate('ID',aID.text,[]) then
begin
  見つけた処理;
  Query1.next;
end else
  見つけられなかった処理;
でどうでしょう。


りな  2010-01-08 08:23:42  No: 36781

みなさん、ありがとうございます。解決することができました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加