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

關於"修改"鍵的問題

尚未結案
jasonchen613
初階會員


發表:67
回覆:75
積分:28
註冊:2003-03-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-03 21:40:57 IP:61.16.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-03 22:37:59 IP:63.84.xxx.xxx 未訂閱
您好!    您是使用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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-05 02:48:38 IP:61.16.xxx.xxx 未訂閱
多謝cashxin2002大大你的熱心幫助 其實我是之前用sexy613帳號的人 因為我的信箱不能使用 且我又把IE 的 cookies 刪掉 我忘了我sexy613 帳號的密碼 所以 關於我之前發問密碼登入框(使用者權限)的問題 無法 給你一個評價(得分) 在此感到抱歉 感謝你對我問題的總總解答 謝謝
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-05 03:44:06 IP:63.84.xxx.xxx 未訂閱
您好!    您太客气了, 在自己的能力範圍所及, 當然愿意提供幫助, 只是說自己的能力有限, 尚在努力學習之中, 故若回复中有錯誤之處, 還望多多見諒!    有關您的舊帳戶(sexy613)問題, 如果确定不再使用的情況下, 可請天使或副站長刪除或更改為您目前的賬戶, 以免做"被扣分的空白戶頭"(哈哈, 蠻繞舌的).    祝: 進步!    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
系統時間:2024-06-01 23:45:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!