いつもお世話になっております。
Delphi2010+WindowsXP SP3で開発しております。
DBCtrlGridのDataSetにTQueryを使用しておりSELECT文で
テーブルのデータを取得しているプログラムがあるのですが、
他の処理から参照しているテーブルが変更(または追加)を
された時に、DBCtrlGridの内容を再表示(最新の状態で表示)
するのにTQueryのActiveをFalseにして直後にTrueにする
方法で再表示を行っています。
上記の方法ですと一応、最新の状態になるのですがレコードの位置が
一番最初のレコードになってしまうので、ブックマークを使用し
元の位置に戻そうとするのですが上手く戻らないという問題が
発生してしまいます。
ブックマークが上手く動かない原因を考えてみるとActiveをFalseに
する前にブックマークを取得しTrueにした後にブックマークを
セット(GotoBookMark)をしているのでポインタの情報がFalseの時と
Trueの時とで違うのではないかと思い、ActiveをTrueのままで
DBCtrlGridの内容を再表示(更新)出来る方法がないかと、
質問させて頂きました。
TQueryのRefreshも試してみたのですが、それっぽい動きをする時と
テーブルの内容と表示される内容が違う(テーブルは2行しかないのに
3行表示されてしまう)時があるので、駄目でした。
どなたか、何か良い方法を知っていましたらご教授頂けると助かります。
以上、宜しくお願い致します。
ども。解決炭かもしれませんが以下で
ブックマークの記憶と再生ができるようです。
procedure TForm1.Button1Click(Sender: TObject);
var
BookmarkStr : TBookmarkStr;
begin
BookmarkStr := Query1.Bookmark;
Query1.Active := False;
Query1.Active := True;
Query1.Bookmark := BookmarkStr;
end;
Delphi20000さん
レスありがとうございます。
TBookmarkStrは知らなかったので、やってみようと思ったのですが
少し調べてみましたらDelphi2009から仕様が変わったらしく
エンバカデロの方でも推奨していないとの事でした。。。
(変わりにGotoBookmark等を使えとなっていました。)
折角、助言頂いて申し訳ないのですが当方の環境ではDelphi2010に
なってしまいますので、見送らせて頂きます。
一応、TBookmarkStrの参考のURLを貼っておきます。
http://docwiki.embarcadero.com/VCL/ja/DB.TBookmarkStr
http://hirottya.cocolog-nifty.com/hirottya/2009/07/index.html
もし、他にも何か良い案がありましたら宜しくお願い致します。
Delphi20000さん 及び 自己レス
TBookmarkStrの追加情報です。
ロジックはDelphi20000さんのやり方で、
型をTBookmarkStrからTBookmarkに変えたところ
正しく動作する事が分かりました。
ただ、同時にGetBookmarkやGotoBookmark等も正しく動作
する様になってしまったので、元々の私のロジックに問題が
あった可能性があります。
色々とBookmark以外のロジックを変更した後に気づいたので
根本原因は分からないままですが、一応解決とさせて頂きます。
Delphi20000さん、ありがとうございましたm(__)m
ツイート | ![]() |