全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2745
推到 Plurk!
推到 Facebook!

clientDataSet.Bookmark 會有 record not found錯誤

答題得分者是:sryang
shininggod
一般會員


發表:16
回覆:20
積分:17
註冊:2009-05-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-11-04 19:38:54 IP:114.34.xxx.xxx 訂閱
這個問題只產生在工作站(XP),我這台(w7 64)跟主機(server 2008)都沒問題orz
delphi 2010;

grid.option上面有開 dgMultiSelect, dgEdit

再跑資料回圈就這樣跑

[code delphi]
for vi:=0 to grid.SelectedRows.Count-1 do
begin
clientDataSet.Bookmark := grid.SelectedRows.Items[vi];

//做事情....
end;

[/code]

這一段沒有問題,問題是:如果有再grid上面改東西之後
cds.Bookmark := grid.SelectedRows.Items[vi];
這一行就會回傳 record not found

這個錯誤神奇的地方在於,只有一筆資料的時候才會發生,
只有一筆的時候無法移動資料cursor.......Orz

如果有多筆,再用滑鼠點其他筆的時候會觸發post(之類的?),反而會去更新到bookmark
*再跑回圈之前post無效,我試過了Orzzz
*clientDataSet.Refresh也無效,傳回true但是出一樣的錯

我google是看說如果 post之後bookmark 會變動,所以無效
............有沒有好辦法能重抓一次已有的bookmark orz
sryang
尊榮會員


發表:38
回覆:741
積分:875
註冊:2002-06-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-11-04 21:08:03 IP:111.254.xxx.xxx 訂閱
SelectedRows 不是這樣用的,請改成這樣:

[code delphi]
for vi:=0 to grid.SelectedRows.Count-1 do
begin
clientDataSet.GotoBookmark(grid.SelectedRows.Items[vi]);
//做事情....
end;
[/code]

------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
編輯記錄
sryang 重新編輯於 2010-11-04 07:08:42, 註解 無‧
shininggod
一般會員


發表:16
回覆:20
積分:17
註冊:2009-05-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-11-04 21:58:26 IP:220.132.xxx.xxx 訂閱
這我也試過了,
另外用一個TBookmark,可以取得,
可是assign過去的時候一樣是record not found

這應該是edit之後,沒有觸發資料移動導致bookmark沒更新到,
另一個原因可能原本舊版的TBookMark不是TByte, 2009之後升級了.....


在程式下post可以成功post, stats 會變成dsBrowse,可是bookmark一樣不能用

我(現在)是想問有沒有辦法重新取得一次bookmark
clientDataSet.reFresh 說明是會把invalid的刪除,我這情況是不會刪除也不會更新(OS:本來就不沒提到更新,這叫文字陷阱XD)

怎樣修正我是不會...orz
撇步是有...(汗)
1.就是recordcount = 1的時候就不取selectRows,不過recordcount可能有問題
2.就是再跑東西之前,對dataset下 insert cancel, 讓他換行就會更新bookmark
*edit cancel會有問題,這時侯stats=dsEdit,

===================引 用 sryang 文 章===================
SelectedRows 不是這樣用的,請改成這樣:

[code delphi]
for vi:=0 to grid.SelectedRows.Count-1 do
begin
clientDataSet.GotoBookmark(grid.SelectedRows.Items[vi]);
//做事情....
end;
[/code]

sryang
尊榮會員


發表:38
回覆:741
積分:875
註冊:2002-06-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-11-05 06:55:42 IP:111.254.xxx.xxx 訂閱
正是因為使用 bookmark 問題多多,個人在處理多選時,大多採用其他方式: 
  1. ListView,本身可以設定出現 Checkbox,但是這並非資料感知元件,單純挑選可以,還要帶編輯就不妥當了
  2. 可設定欄位為 Checkbox 欄位的 DBGrid,這個得另外安裝元件,可以從 http://www.filewatcher.com/m/CheckDBGrid.zip.5132.0.0.html 下載到 TCheckDBGrid 元件的原始碼
供您參考
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
老大仔
尊榮會員


發表:77
回覆:835
積分:1082
註冊:2006-07-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-11-05 07:58:17 IP:59.120.xxx.xxx 未訂閱
網頁看的到,但是無法下載
另外~我也想請問 sryang 大大一下
這個元件支援Delphi7嗎??

===================引 用 sryang 文 章===================
正是因為使用 bookmark 問題多多,個人在處理多選時,大多採用其他方式:
  1. ListView,本身可以設定出現 Checkbox,但是這並非資料感知元件,單純挑選可以,還要帶編輯就不妥當了
  2. 可設定欄位為Checkbox 欄位的 DBGrid,這個得另外安裝元件,可以從 http://www.filewatcher.com/m/CheckDBGrid.zip.5132.0.0.html下載到 TCheckDBGrid 元件的原始碼
供您參考
sryang
尊榮會員


發表:38
回覆:741
積分:875
註冊:2002-06-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-11-05 08:09:49 IP:111.254.xxx.xxx 訂閱
老大仔:
個人已經將檔案上傳至 KTop,請至 http://delphi.ktop.com.tw/board.php?cid=31&fid=77&tid=101718 下載

另外,Delphi 7 以及以後版本支援的問題,個人認為應該沒有問題
(偷偷告訴你,個人幫公司寫的 DBGrid 就是以這個為基礎下去增加功能的,Delphi 2010 都 OK)
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
shininggod
一般會員


發表:16
回覆:20
積分:17
註冊:2009-05-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-11-05 10:45:36 IP:114.34.xxx.xxx 訂閱
這個神奇的地方是...
我電腦, W7-64 delphi2010 sql server2008 (只有management studio)
跟主機, 2008-64 sql server2008 (full)
都不會發生

只有工作站 XP-32 BDE sql native client
其他台 XP32就沒試了,如果有的可以有的不行那就可以煩好幾個晚上了 Orz

感覺上跟永遠沒修好的recordcount一樣...orz,
不過我有試過 D5不會,也可有能是跟recordcount一樣卡彈才會發生?

所以最終辦解決法一樣....就是不去用Orz....


另外自爆: .bookmark跟 gotobookmark一樣,所以挑比較短的(核爆喔喔喔喔Orz)
property Bookmark: TBookmark read GetBookmark write GotoBookmark;
系統時間:2017-10-21 22:04:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!