一個ADOData存取失敗的問題 |
尚未結案
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
小弟使用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 發送簡訊給我 |
引言: 小弟使用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 發送簡訊給我 |
我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 發送簡訊給我 |
加上紅色的部分看看
引言: 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |