線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:884
推到 Plurk!
推到 Facebook!

一個ADOData存取失敗的問題

尚未結案
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-03 15:57:04 IP:61.221.xxx.xxx 未訂閱
小弟使用ADODataSet來新增資料,結果發現若先按BtnAppClick再按BtnModClick 結果是可以被update但是如果我再用一個DBEdit欄位為F04,動作順序如下 先按BtnAppClick --> 再到DBEdit作編輯動作 --> 再按BtnModClick 此時就會出現error : row cannot be locate for update , some value have been changed since last read . 請問這個怎處理阿?? procedure TForm1.BtnAppClick(Sender: TObject); begin ADODataSet1.Append; ADODataSet1.FieldByName('F01').asstring:='99999'; ADODataSet1.FieldByName('F02').asstring:='test'; ADODataSet1.Post; end; procedure TForm1.BtnModClick(Sender: TObject); begin ADODataSet1.Edit; ADODataSet1.FieldByName('F03').asstring:='0000000'; ADODataSet1.Post; end;
------
ivankuo
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-03 16:02:50 IP:211.21.xxx.xxx 未訂閱
引言: 小弟使用ADODataSet來新增資料,結果發現若先按BtnAppClick再按BtnModClick 結果是可以被update但是如果我再用一個DBEdit欄位為F04,動作順序如下 先按BtnAppClick --> 再到DBEdit作編輯動作 --> 再按BtnModClick 此時就會出現error : row cannot be locate for update , some value have been changed since last read . 請問這個怎處理阿?? procedure TForm1.BtnAppClick(Sender: TObject); begin ADODataSet1.Append; ADODataSet1.FieldByName('F01').asstring:='99999'; ADODataSet1.FieldByName('F02').asstring:='test'; ADODataSet1.Post; ADODataSet1.Refresh; end; procedure TForm1.BtnModClick(Sender: TObject); begin ADODataSet1.Edit; ADODataSet1.FieldByName('F03').asstring:='0000000'; ADODataSet1.Post; end;
加入紅色那一行試試看....
------
~小弟淺見,參考看看~
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-03 16:14:44 IP:61.221.xxx.xxx 未訂閱
我try是可以啦~~但是我會有另外一個問題 如果我的ADODataSet的MaxRecord=50,在ADODataSet1AfterScroll會有擷取下50筆資料的動作 procedure TForm1.ADODataSet1AfterScroll(DataSet: TDataSet); var old:TBookmark; begin if (ADODataSet1.state<>dsBrowse) then exit; if (ADODataSet1.RecordCount=0) then exit; if (ADODataSet1.recno=ADODataSet1.RecordCount) and (ADODataSet1.MaxRecords=ADODataSet1.RecordCount) then begin old:=ADODataSet1.GetBookmark; ADODataSet1.active:=false; ADODataSet1.MaxRecords:=ADODataSet1.MaxRecords 50; ADODataSet1.active:=true; try ADODataSet1.GotoBookmark(old); ADODataSet1.FreeBookmark(old); except end; end; end; 但是當我一樣在新增資料,動作順序如下: 先按BtnAppClick --> 再到DBEdit作編輯動作 --> 再按BtnModClick 此時就會出現error : row cannot be locate for update , some value have been changed since last read 我無法做requery或refresh的動作,因為新增的資料會是第51筆資料,但是requery 後會locate不到剛剛新增的那一筆資料,所以才不下requery 結果遇到這樣的問題?? 前輩有何解決之道阿??
------
ivankuo
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-03 19:04:15 IP:61.216.xxx.xxx 未訂閱
加上紅色的部分看看
引言: procedure TForm1.ADODataSet1AfterScroll(DataSet: TDataSet); var old:TBookmark; begin if (ADODataSet1.state<>dsBrowse) then exit; if (ADODataSet1.RecordCount=0) then exit; if (ADODataSet1.recno=ADODataSet1.RecordCount) and (ADODataSet1.MaxRecords=ADODataSet1.RecordCount) then begin ADODataSet1.DisableControls; old:=ADODataSet1.GetBookmark; ADODataSet1.active:=false; ADODataSet1.MaxRecords:=ADODataSet1.MaxRecords 50; ADODataSet1.active:=true; try ADODataSet1.EnableControls; ADODataSet1.GotoBookmark(old); ADODataSet1.FreeBookmark(old); except end; end; end; 但是當我一樣在新增資料,動作順序如下: 先按BtnAppClick --> 再到DBEdit作編輯動作 --> 再按BtnModClick 此時就會出現error : row cannot be locate for update , some value have been changed since last read 我無法做requery或refresh的動作,因為新增的資料會是第51筆資料,但是requery 後會locate不到剛剛新增的那一筆資料,所以才不下requery 結果遇到這樣的問題?? 前輩有何解決之道阿??
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-05 09:19:08 IP:61.221.xxx.xxx 未訂閱
一樣出現error : row cannot be locate for update , some value have been changed since last read     我的看法是新增的那筆資料是在第50筆資料以後,一旦DataSet作requery的動作,且dataSet本身又MaxRecord:=50  抓的資料是前50筆,所以DataSet會Locate不到資料,不知如何解決~~~          發表人 -
------
ivankuo
系統時間:2024-11-25 16:45:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!