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

資料驗證的問題

答題得分者是:T.J.B
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-29 20:06:06 IP:61.221.xxx.xxx 未訂閱
請教各位前輩 小弟在新增一筆資料時 希望在如 DBEdit1 Exit時去驗證資料庫內是否有重複的資料 小弟使用的方法是locate 但在locate 前DBEdit1的時會先被送進資料庫 而產生資料庫的錯誤訊息,進而導致字定的警示失效 請教各位前輩的高見,謝謝
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-29 21:44:21 IP:61.216.xxx.xxx 未訂閱
是不是因為你正在dsInsert而且又locate才發生錯誤呢? 這樣你在onbeforepost的時候,先透過其他的TQuery查查看
cashxin2002
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-29 21:51:22 IP:63.84.xxx.xxx 未訂閱
您好!    您的DBEdit1對應的資料欄位應該是鍵值欄位吧, 但在沒有做Post之前, 應該不會有如您所說的先被送進資料庫的現象發生吧, Locate只是用來查詢資料錄所用, 并沒有存取資料表的功能. 小弟覺得比較好的方法是用兩個資料集元件來處理這樣的驗証動作, 連接同一個資料表, 將查詢作業和存取作業分開, 一個資料集元件作為查詢之用, 另一個資料集元件作為存取之用, 這樣就能比較有效的處理查詢和存取的功能了. 參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-29 22:24:43 IP:218.160.xxx.xxx 未訂閱
參考看看 1;建議你Tdbedit改用TEdit那這樣就可以在離開的時候作檢查 2;若你要用TDBEdit作那麼就在applyupDate回資料庫之前作檢查較理想 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-29 22:34:12 IP:218.160.xxx.xxx 未訂閱
引言: 請教各位前輩 小弟在新增一筆資料時 希望在如 DBEdit1 Exit時去驗證資料庫內是否有重複的資料 小弟使用的方法是locate 但在locate 前DBEdit1的時會先被送進資料庫 而產生資料庫的錯誤訊息,進而導致字定的警示失效 請教各位前輩的高見,謝謝
再說明一下 ; 在未作存檔動作之前DBEdit1的值並不會被送進資料庫 而是先存在暫存記憶體當中 直到作存檔動作時才會送進資料庫 所以產生資料庫的錯誤訊息並不是locate引起的 也不是DBEdit1的值被送進資料庫 而是有別的原因 不然就是你作locate之前 就把資料存進去 然後因為資料重複 所以引發資料庫自己的錯誤訊息 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-30 08:45:01 IP:61.221.xxx.xxx 未訂閱
感謝各位前輩的指導我已經知道該如何處理此問題了 但下面這段話小弟能有疑問 在未作存檔動作之前DBEdit1的值並不會被送進資料庫 而是先存在暫存記憶體當中 直到作存檔動作時才會送進資料庫 所以產生資料庫的錯誤訊息並不是locate引起的 也不是DBEdit1的值被送進資料庫 而是有別的原因 不然就是你作locate之前 就把資料存進去 然後因為資料重複 所以引發資料庫自己的錯誤訊息 我試過locate之後我做POST動作時 系統顯示非新增或修改狀態 而在locate前我並無做存檔動作 是因為做locate時造成紀錄指標移動而將資料存進資料庫的原因嗎? 亦或有其他因素,感謝各位的指導
cashxin2002
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-30 09:15:46 IP:63.84.xxx.xxx 未訂閱
Hi.    If the dataset's state in dsinsert or dsedit, when you use the locate, the cursor will be move, so the insert data and modify data will be save to database. So I think not allow user use locate when the dataset's state in dsinsert or dsedit is a good idea.    Try see see!    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-30 09:42:56 IP:61.221.xxx.xxx 未訂閱
think you for cashxin2002 你的說法我認同
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-30 10:05:47 IP:61.220.xxx.xxx 未訂閱
引言: 我試過locate之後我做POST動作時 系統顯示非新增或修改狀態 而在locate前我並無做存檔動作 是因為做locate時造成紀錄指標移動而將資料存進資料庫的原因嗎? 亦或有其他因素,感謝各位的指導
沒錯 會有做locate時造成紀錄指標移動而將資料存進資料庫的情形發生 是因為你把LOCATE跟INSERT,UPDATE的TQUERY都是同一個 舉例說 你的DBEDIT1所聯結的是QUERY1的話 當你對DBEDIT1作INSERT或UPDATE的時候 此時你要檢查是否重複資料所以要去LOCATE 但是你卻用QUERY1來LOCATE 但是一但紀錄指標移動的話 就會把它存進資料庫 但是你LOCATE的程式是去比對DBEDIT1.TEXT(一般而言) 而此時就算你新增是一筆新資料(因為兩邊都有相同資料 TABLE 及DBEDIT1.TEXT) 也會有資料重複的情形發生 所以當你要做LOCATE的時候 只要再拿另一個QUERY來作 就能避免此情形發生了 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
系統時間:2024-07-01 16:20:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!