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

怎么取到TDBGrid或TTable中各个cell之值

答題得分者是:herbert2
disposition
一般會員


發表:2
回覆:1
積分:0
註冊:2004-11-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-24 18:27:36 IP:218.106.xxx.xxx 訂閱
怎么取到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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-24 21:38:26 IP:211.72.xxx.xxx 訂閱
基本觀念:
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-27 10:23:16 IP:218.106.xxx.xxx 訂閱
非常感谢herbert2大大,受教了。
系統時間:2024-04-20 16:24:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!