關於"修改"鍵的問題 |
尚未結案
|
jasonchen613
初階會員 ![]() ![]() 發表:67 回覆:75 積分:28 註冊:2003-03-25 發送簡訊給我 |
Sorry 各位大大 我主要是要寫個類似通訊錄的程式 其中我想要 在這個(通訊錄)FORM 下的 TForm1.DBEdit1 按瀏覽功能鍵的BOTTON時 如:上一筆 下一筆
不能輸入資料 要按修改 或 新增 鍵時 才能輸入資料。 我大致以成功做出
但是有一個地方 有點問題 就是當我按修改鍵 改完資料後 在按瀏覽鍵(下一筆,上一筆,最後一筆,第一筆)時 那筆資料卻已被儲存了
照理說該筆資料因該是無法被儲存 因為我還未按"儲存"鍵
(我的設計是說 如果要修改或新增一筆資料時 因需按儲存鍵 該筆資料
才會被儲存) 所以 希望夠位大哥大姐幫幫我 看到底是哪邊出了問題 以下是我的程式碼: private
CanEdit : Boolean; //我有在這宣告canedit
{ Private declarations }
public
{ Public declarations }
end; var
Form2: TForm2; implementation uses Unit3; {$R *.DFM} procedure TForm2.BitBtn5Click(Sender: TObject);
begin
CanEdit := True;
ADOTable1.Insert;//新增
end; procedure TForm2.N1Click(Sender: TObject);
begin
CanEdit := True;
ADOTable1.Insert;//新增
end; procedure TForm2.BitBtn6Click(Sender: TObject);
begin
IF Not ADOTable1.EOF Then
Begin
IF Application.MessageBox('確定要刪除這筆資料嗎?','注意',
MB_YESNO MB_ICONQuestion)=IDYES Then
ADOTable1.Delete;
IF ADOTable1.EOF Then
showmessage('沒有資料了');
END;
end; procedure TForm2.D1Click(Sender: TObject);
begin
IF Not ADOTable1.EOF Then
Begin
IF Application.MessageBox('確定要刪除這筆資料嗎?','注意',
MB_YESNO MB_ICONQuestion)=IDYES Then
ADOTable1.Delete;
IF ADOTable1.EOF Then
showmessage('沒有資料了');
END;
end; procedure TForm2.BitBtn7Click(Sender: TObject);
begin
CanEdit := True;
IF ADOTable1.State in [dsEdit,dsInsert] Then
ADOTable1.Post; //儲存
showmessage('資料已儲存');
end; procedure TForm2.S1Click(Sender: TObject);
begin
CanEdit := True;
IF ADOTable1.State in [dsEdit,dsInsert] Then
ADOTable1.Post; //儲存
showmessage('資料已儲存');
end; procedure TForm2.BitBtn1Click(Sender: TObject);
begin
CanEdit := False;
ADOTable1.First; //第一筆
end; procedure TForm2.BitBtn2Click(Sender: TObject);
begin
CanEdit := False;
ADOTable1.Prior; //上一筆
if ADOTable1.Bof then
showmessage('已再資料庫的第一筆處了');
end; procedure TForm2.BitBtn3Click(Sender: TObject);
begin
CanEdit := False;
ADOTable1.Next; //下一筆
if ADOTable1.Eof then
showmessage('已再資料庫的最後一筆處了');
end; procedure TForm2.BitBtn4Click(Sender: TObject);
begin
CanEdit := False;
ADOTable1.Last; //最後一筆
end; procedure TForm2.BitBtn8Click(Sender: TObject);
begin
CanEdit := True;
ADOTable1.Edit; //修改 不知道是不是這邊的問題
end; procedure TForm2.R1Click(Sender: TObject);
begin
CanEdit := True;
ADOTable1.Edit;//修改
end; procedure TForm2.A1Click(Sender: TObject);
begin
AboutBox. Show;
end; procedure TForm2.M1Click(Sender: TObject);
begin
ShellExecute( Application.Handle,'open',
PChar('C:\WINDOWS\Desktop\password\Moto.hlp'), nil, nil, SW_ShowNormal ); end; procedure TForm2.BitBtn10Click(Sender: TObject);
begin
if ADOtable1.locate(ComboBox1.Text,Edit1.Text,[])then
MessageBeep(0)
else
ShowMessage('找不到資料,請重新輸入一次');
end; procedure TForm2.C1Click(Sender: TObject);
begin
ADOTable1.Cancel;
CanEdit := False; //取消
end; procedure TForm2.DataSource1DataChange(Sender: TObject; Field: TField);
begin
if not CanEdit and (ADOTable1.State in [dsEdit,dsInsert]) then
ADOTable1.Cancel; //DataSource裡的設定 end; procedure TForm2.BitBtn9Click(Sender: TObject);
begin
ADOTable1.Cancel;
CanEdit := False;//取消
end;
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! 您是使用DBGrid元件做為資料感知元件吧, 出現這個問題是因為當資料錄指針移動的時候, 即會自動做Post, 所以當前資料內容就會存入資料表了, 而并不是您源碼中的標注部分(ADOTable1.Edit;)的問題. 如果要做到您需要的效果, 即除非使用者按下Post按鈕或Cancel按鈕, 否則資料庫不做異動, 我建議您在Form中再加上一些資料感知元件, 比如DBEdit等等, 以作為使用者輸入之用, 其使用只需設定DataSource屬性及DataField屬性即可, 比較方便, 也不需要更改程式碼, 只需調整Form中DBGrid元件, Button元件和新加入的資料感知元件的位置即可, 另外需要把DBGrid元件的ReadOnly屬性值設為False, 即不允許使用者在DBGrid元件上做資料的異動. 參考看看! =====================
努力,相信會獲得美麗!
忻晟 發表人 - cashxin2002 於 2003/10/03 22:40:21
------
忻晟 |
jasonchen613
初階會員 ![]() ![]() 發表:67 回覆:75 積分:28 註冊:2003-03-25 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |