DBCtrlGridの内容を再表示するには?

解決


ふろんてぃあ  2011-06-02 03:53:33  No: 40604

いつもお世話になっております。
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行表示されてしまう)時があるので、駄目でした。

どなたか、何か良い方法を知っていましたらご教授頂けると助かります。

以上、宜しくお願い致します。


Delphi20000  2011-06-02 08:46:47  No: 40605

ども。解決炭かもしれませんが以下で
ブックマークの記憶と再生ができるようです。

procedure TForm1.Button1Click(Sender: TObject);
var
  BookmarkStr : TBookmarkStr;
begin

  BookmarkStr := Query1.Bookmark;
  Query1.Active := False;

  Query1.Active := True;
  Query1.Bookmark := BookmarkStr;

end;


ふろんてぃあ  2011-06-02 19:27:37  No: 40606

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

もし、他にも何か良い案がありましたら宜しくお願い致します。


ふろんてぃあ  2011-06-02 19:51:19  No: 40607

Delphi20000さん 及び  自己レス

TBookmarkStrの追加情報です。
ロジックはDelphi20000さんのやり方で、
型をTBookmarkStrからTBookmarkに変えたところ
正しく動作する事が分かりました。
ただ、同時にGetBookmarkやGotoBookmark等も正しく動作
する様になってしまったので、元々の私のロジックに問題が
あった可能性があります。
色々とBookmark以外のロジックを変更した後に気づいたので
根本原因は分からないままですが、一応解決とさせて頂きます。

Delphi20000さん、ありがとうございましたm(__)m


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

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






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