いつもお世話になります。
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;
よろしくお願いします。
ブックマークした位置がなくなった場合、最終レコードに飛んでいいのなら
try
table1.GotoBookmark(bookmark);
except
table1.Last;
end;
でどうでしょう?
Questさん
table1.Last;
で目的の位置に位置づけできました。
ありがとうございます。
もし可能であれば、exceptを使用せずに、
あらかじめ、bookmarkの位置を渡してやりたいのですが、
こういったことは可能なものでしょうか?
if not table1.bookmark then
table1.GotoBookmark(bookmark-1);
みたいな、すいません、上は適当に書きました。
重ね重ねお手数おかけしますが、
教えていただけるとありがたいです。
よろしくお願いします。
tarouさん、こんにちは。
予め、現在のレコード(だけ)が削除されるとわかっているなら
ブックマークを保存する前に
table1.prev;
として1つ前のレコードに移動すればexceptで拾わなくても良くなると思いますが
処理結果が不定の場合は、やはりexceptを使わざるを得ないでしょう。
因みにbookmarkってTBytes型でしたっけ?TBookmarkって型があったような…?
いずれにしても、bookmarkはレコードの位置を示すデータへのポインタの様ですので
それに対して加減算をしても、保存されたレコードの位置が前後するわけではないでしょう。
Questさん、こんにちは。
ありがとうございます。
<<いずれにしても、bookmarkはレコードの位置を示すデータへのポインタの様ですので
<<それに対して加減算をしても、保存されたレコードの位置が前後するわけではないでしょう。
なるほど、わかりました。
TBookmark型は
Delphi2009か2010からTBytes型という型に変更されたようです。
スマートな回答いただきありがとうございました。
助かりました。
ツイート | ![]() |