怎么取到TDBGrid或TTable中各个cell之值 |
答題得分者是:herbert2
|
disposition
一般會員 發表:2 回覆:1 積分:0 註冊:2004-11-20 發送簡訊給我 |
怎么取到TDBGrid或TTable中各个cell之值
一个简单又特别的问题。我的应用中有TTable、TDBGrid。数据表的形式是 A B C ... <= FieldName C11 C12 C13 ... C21 C22 C23 ... C31 C32 C33 ... . . . 各个cell的值都是String,在其中任何一行都可能插入新行。插入时要进行内容检查: 插入行的单元格内容A B之值不能与表中任一行的A B相同。 这样在TTable的BeforePost事件中需要取得各行的A、B值。但是这时不能用TTable的First()、Next()等方法定位,否则会不停地反复触发BeforePost事件直至overflow,用DisableControls()也不管事只要一走到First()、Next()这类命令,就会再触发BeforePost事件。而且TTable和TDBGrid都不能用->Cells[][]来取得cell的值。 请教各位先进大大,该怎么解决?谢谢先~~ |
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
基本觀念:
Record指標一移動, 若原 Record 屬 dsInsert 或 dsEdit 狀態, 一定會触发 BeforePost(), DBGrid 只是顯示数据的元件, 不可取值或填值 (您就把他當做 Query 或 Table 的 Canvas 看待吧). 故通常用数据庫的 Primerkey 或 Trigger 或 Procedure 做 Unique 的檢查, 或用 OnPostError() 補捉違反 Primerkey 規則的錯誤做處理. 建議另一個方法: 於 BeforePost() 用另一個 Query 從数据庫挑選與正在編修的資料重複的 Record, 若有, 便是發生 Record 重複的錯誤. 但要注意:若是修改舊 Record, 且 Primerkey 未改, 則不算是重複, 要依您的数据庫 Table 及程式流程的設計方式來防止此一誤判. 但若恰好這讀取零筆後瞬間, 又有網路上的另一台電腦存入與這 Record 一樣的 Record, 此法仍會破功. 這也就是絕大多數的人採用数据庫的 Method 來防止重複的原因. ===================引 用 disposition 文 章=================== 怎么取到TDBGrid或TTable中各个cell之值=>不可執行 插入时要进行内容检查: 插入行的单元格内容A B之值不能与表中任一行的A B相同。 这样在TTable的BeforePost事件中需要取得各行的A、B值。但是这时不能用TTable的First()、Next()等方法定位,否则会不停地反复触发BeforePost事件直至overflow,用DisableControls()也不管事只要一走到First()、Next()这类命令,就会再触发BeforePost事件(=>原本就必須触发)。而且TTable和TDBGrid都不能用->Cells[][]来取得cell的值。 请教各位先进大大,该怎么解决?谢谢先~~
編輯記錄
herbert2 重新編輯於 2008-10-24 21:47:54, 註解 無‧
|
disposition
一般會員 發表:2 回覆:1 積分:0 註冊:2004-11-20 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |