GotoBookmarkについて

解決


tarou  2010-11-05 00:34:10  No: 39495

いつもお世話になります。

Delphi 2010で開発しています。

データセットのGotoBookmarkについて教えていただきたいのですが、

-------------------
1
2
3
4←位置づけしたい
5←削除 
-------------------

の5レコードがある場合で、最後の5レコード目が削除された場合に
4のレコード位置に位置づけしたいのですが、どうすれば良いか教えてください。

var
  bookmark:tbytes;
begin
  try
    book:=table1.Bookmark;
    なんらかのテーブル移動を伴う処理 or 削除
    try
      table1.GotoBookmark(bookmark);
    except
    //最終レコードが削除された場合はブックマークした位置がないので
    //トップに位置づけされてしまう
    end;
  finally
    table1.FreeBookmark(bookmark);
  end;

よろしくお願いします。


Quest  2010-11-05 02:40:49  No: 39496

ブックマークした位置がなくなった場合、最終レコードに飛んでいいのなら
    try
      table1.GotoBookmark(bookmark);
    except
      table1.Last;
    end;
でどうでしょう?


tarou  2010-11-06 02:36:00  No: 39497

Questさん

table1.Last;
で目的の位置に位置づけできました。
ありがとうございます。

もし可能であれば、exceptを使用せずに、
あらかじめ、bookmarkの位置を渡してやりたいのですが、
こういったことは可能なものでしょうか?

if not table1.bookmark then
  table1.GotoBookmark(bookmark-1);

みたいな、すいません、上は適当に書きました。
重ね重ねお手数おかけしますが、
教えていただけるとありがたいです。

よろしくお願いします。


Quest  2010-11-06 19:56:51  No: 39498

tarouさん、こんにちは。

予め、現在のレコード(だけ)が削除されるとわかっているなら
ブックマークを保存する前に
table1.prev;
として1つ前のレコードに移動すればexceptで拾わなくても良くなると思いますが
処理結果が不定の場合は、やはりexceptを使わざるを得ないでしょう。
因みにbookmarkってTBytes型でしたっけ?TBookmarkって型があったような…?
いずれにしても、bookmarkはレコードの位置を示すデータへのポインタの様ですので
それに対して加減算をしても、保存されたレコードの位置が前後するわけではないでしょう。


tarou  2010-11-22 23:19:05  No: 39499

Questさん、こんにちは。

ありがとうございます。

<<いずれにしても、bookmarkはレコードの位置を示すデータへのポインタの様ですので
<<それに対して加減算をしても、保存されたレコードの位置が前後するわけではないでしょう。

なるほど、わかりました。

TBookmark型は
Delphi2009か2010からTBytes型という型に変更されたようです。

スマートな回答いただきありがとうございました。
助かりました。


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

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






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