たびたびすみません。delphi4のoracle8iを使っています。select文で検索を行った後、その検索したレコードの次のデータをquery.nextをつかって表示できるようにしたいのですが、検索した時点でDBGridにに検索したデータしか表示されないため、query.nextを実行しても反応がなく、次のレコードへ移動しません。そこで、locateを使ってDBGridに全件データが表示された状態で、検索したIDへカーソルを移動しようと思っているのですが、なかなかうまくいきません。このやり方だと、だめでしょうか?
locate('ID', aID.Text, []);
ここでDBGridをオープン ← ここも、書き方をいろいろと試しているのですが、うまく機能しません。
QueryはDataSourceで関連づけされているとして
Query.Active := True;
Query.locate('ID', aID.Text, []);
で動作できますが?
また
Query.First; //最初の行へ
Query.Next;
Query.Next;
Query.Next;
で4行目のデータへ移動できますよ。
locateメソッドは、TDatasetに対して発行します。TDBGridはTDatasetの内容を表示しますので、TDatasetが検索結果の場合は、検索結果だけを表示します。その次のレコードは、TDatasetにありませんので表示できません。ですから、query.nextでも、反応がないのは当たり前です。
たとえば、住所録で、市を指定して検索して、数件のレコードを検索しますと、その中から、locateすることはできますが、検索結果にないものをlocateで検索はできません。
全件表示してなのですね。
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
見つけられなかった処理;
でどうでしょう。
みなさん、ありがとうございます。解決することができました。
ツイート | ![]() |