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

向TADODataSet批量添加记录后再提交如何实作?

尚未結案
lovelypp
初階會員


發表:122
回覆:111
積分:46
註冊:2003-02-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-02 15:43:22 IP:218.104.xxx.xxx 未訂閱
主要是为了提高速度
terrychen
尊榮會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-02 16:07:28 IP:61.221.xxx.xxx 未訂閱
您好: 下面剛好有http://delphi.ktop.com.tw/topic.php?TOPIC_ID=45627 ~~應無所住而生其心~~
cashxin2002
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-02 16:19:37 IP:63.84.xxx.xxx 未訂閱
您好﹗    一般來講﹐使用ADODataSet元件平做批量處理的事務﹐需要注意以下兩點﹕ 1. ADODataSet元件的CursorType屬性值需為ctKeySet或ctStatic 2. ADODataSet元件的LockType屬性值需為ltBatchOptimistic    舉一個範例如下﹕ 1. 正确設定ADOConnection元件的ConnectionString屬性 2. 使用一個ADODataSet元件連接上此ADOConnection元件﹐設定以上注意的兩個屬性之外﹐將CommandType屬性值設定為cmdText﹐CommandText屬性值設為Select * From 資料表名﹐并將其Active屬性設為True﹐即開啟資料庫 3. 在Form中加入DataSource元件﹐指向上游的ADODataSet﹐再加入DBGrid元件和DBNavigator元件﹐其DataSource屬性值指向上游的DataSource元件﹒ 4. 加入兩個Button元件﹐一個作用為UpdateBatch﹐即更新資料庫﹐另一個的作用為CancelBatch﹐即取消之前的更新﹒
Button1的OnClick事件中﹕
begin
  ADODataSet1.UpdateBatch(arAll);
end;    Button2的OnClick事件中﹕
begin
  ADODataSet1.CancelBatch(arAll);
end;
執行範例程式﹐先使用DBNavigator元件的新增或者刪除功能對資料表進行異動﹐然后再分別使用兩個Button元件的事件﹐比較看看就知道其效果了﹒ 參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
lovelypp
初階會員


發表:122
回覆:111
積分:46
註冊:2003-02-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-02 18:09:23 IP:218.2.xxx.xxx 未訂閱
=================================================================== 執行範例程式﹐先使用DBNavigator元件的新增或者刪除功能對資料表進行異動﹐====================================================== 用代码如何实现, dset.Insert; ... UpdateBatch(...) 吗?
cashxin2002
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-02 18:15:47 IP:63.84.xxx.xxx 未訂閱
您好﹗    程式碼可照同正常的Insert語法﹕ ADODataSet1.Insert; 每筆新增動作之后用Post存入﹕ ADODataSet1.Post; 如果需要真正將新增資料的異動存入資料庫﹐必須使用UpdateBatch做批處理﹕ ADODataSet1.UpdateBatch(arAll) 取消之前的新增異動﹐可使用CancelBatch做批處理 ADODataSet1.CancelBatch(arAll) 參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
lovelypp
初階會員


發表:122
回覆:111
積分:46
註冊:2003-02-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-02 18:43:34 IP:218.2.xxx.xxx 未訂閱
谢谢,能说明设置如下两个属性的原因吗? 1. ADODataSet元件的CursorType屬性值需為ctKeySet或ctStatic 2. ADODataSet元件的LockType屬性值需為ltBatchOptimistic
cashxin2002
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-02 20:45:12 IP:63.84.xxx.xxx 未訂閱
您好!    CursorType屬性: 指標形態 ctKeySet值: 選出的資料表若事后被其它使用者新增的資料看不到 ctStatic值: 資料移動時完全看不到    LockType屬性: 資料表的鎖定形態 itBatchOptimistic值: 可寫入, 當執行時立即鎖下, 執行Updates時是整批寫入資料, 主要用于ADODataSet元件的批處理功能.    這樣寫有些模糊, 建議您參考一下Help中的說明, 里面寫得比較詳細.    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
lovelypp
初階會員


發表:122
回覆:111
積分:46
註冊:2003-02-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-02 21:31:04 IP:218.2.xxx.xxx 未訂閱
刚刚试了一下,果然在Insert时快许多。 但是当执行UpdateBatch后许久才返回, 我总共添加一万笔记录,数据量不是很大,应该不会这么慢的。 不知道什么原因? thanks anyway!
cashxin2002
版主


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-03 08:57:07 IP:63.84.xxx.xxx 未訂閱
您好﹗    參考一下這里﹕ http://delphi.ktop.com.tw/topic.php?TOPIC_ID=45627    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
系統時間:2024-07-01 14:51:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!