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

dbExpress 存檔問題

答題得分者是:sryang
feng2939
一般會員


發表:22
回覆:30
積分:15
註冊:2013-03-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-04-16 15:18:08 IP:220.130.xxx.xxx 訂閱
初學新手, 請教諸位先進問題,
1. form 設定如下:
---> DataSource ---> DBNavigator
SQLConnection ---> SQLTable ---> DataSetProvider ---> ClientDataSet
---> DBEdit

2. 在 DBNavigator 可 新增, 刪除, 修改 record, First, Prior, Next, Last .. 均無問題

3. 在離開 form 時, db server table 並沒產生任何異動,

請教是那裡出了問題.

謝謝!!!
------
DVF
feng2939
一般會員


發表:22
回覆:30
積分:15
註冊:2013-03-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2013-04-16 15:21:29 IP:220.130.xxx.xxx 訂閱
補充說明:

XE3 MS SQL2008
===================引 用 feng2939 文 章===================
初學新手, 請教諸位先進問題,
1. form 設定如下:
---> DataSource ---> DBNavigator
SQLConnection ---> SQLTable ---> DataSetProvider ---> ClientDataSet
---> DBEdit

2. 在 DBNavigator 可 新增, 刪除, 修改 record, First, Prior, Next, Last .. 均無問題

3. 在離開 form 時, db server table 並沒產生任何異動,

請教是那裡出了問題.

謝謝!!!
------
DVF
max5020
資深會員


發表:26
回覆:275
積分:320
註冊:2003-06-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2013-04-16 15:22:53 IP:59.125.xxx.xxx 訂閱
沒有COMMIT ?
feng2939
一般會員


發表:22
回覆:30
積分:15
註冊:2013-03-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2013-04-16 16:25:03 IP:220.130.xxx.xxx 訂閱
謝謝!!!
沒 commit , 全部都是使用 dbExpress 元件
ps: 若是用 BDE 元件, 則沒這問題

===================引 用 max5020 文 章===================
沒有COMMIT ?
------
DVF
GrandRURU
站務副站長


發表:235
回覆:1655
積分:1753
註冊:2005-06-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2013-04-16 21:02:40 IP:36.226.xxx.xxx 未訂閱
ClientDataSet1.ApplyUpdates(0);


===================引 用 feng2939 文 章===================
謝謝!!!
沒 commit , 全部都是使用 dbExpress 元件
ps: 若是用 BDE 元件, 則沒這問題

===================引 用 max5020 文 章===================
沒有COMMIT ?
feng2939
一般會員


發表:22
回覆:30
積分:15
註冊:2013-03-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2013-04-17 10:30:35 IP:220.130.xxx.xxx 訂閱
謝謝, GrandRURU
有試過, 得到的結果如下:
--
SQL State: HY000, SQL Error Code:0
連線正忙碌於另一命令結果


===================引 用 GrandRURU 文 章===================
ClientDataSet1.ApplyUpdates(0);


===================引 用 feng2939 文 章===================
謝謝!!!
沒 commit , 全部都是使用 dbExpress 元件
ps: 若是用 BDE 元件, 則沒這問題

===================引 用 max5020 文 章===================
沒有COMMIT ?
------
DVF
GrandRURU
站務副站長


發表:235
回覆:1655
積分:1753
註冊:2005-06-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2013-04-17 14:43:11 IP:59.120.xxx.xxx 未訂閱
如果可以
還麻煩你把 Simple code 放上來,這樣可以讓其它高手更了解你的狀況

===================引 用 feng2939 文 章===================
謝謝, GrandRURU
有試過, 得到的結果如下:
--
SQL State: HY000, SQL Error Code:0
連線正忙碌於另一命令結果
GrandRURU
站務副站長


發表:235
回覆:1655
積分:1753
註冊:2005-06-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2013-04-18 16:15:25 IP:59.120.xxx.xxx 未訂閱
新版Delphi 的 DBX DRIVER FOR SQL Server 需要使用 SQL Native Client 

不過你可以連結,就應該不是這方面的問題,以下有另一種解法,請參閱:

Connecting to SQL Server using Delphi and dbExpress
編輯記錄
GrandRURU 重新編輯於 2013-04-18 16:16:38, 註解 無‧
sryang
尊榮會員


發表:38
回覆:742
積分:876
註冊:2002-06-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2013-04-18 16:34:48 IP:114.35.xxx.xxx 訂閱
自己用程式去 open SQLTable,再 open ClientDataSet,我說的對嗎?

這樣寫是百分之百錯誤的用法,用 DbExpress 時要記住,這是 3-tier 的架構

SQLTable / SQLQuery / SQLDataSet 與 DataSetPrivider 是「Server 端」

ClientDataSet 是「Client 端」

Open / Close 等操作,只須針對 Client 端操作就可以,Server 端會自動跟著 Open / Close

另外,連接到 SQL Server 時,連線會被正在開啟的資料集鎖住,無法更新,要把已開啟的資料集關閉才可以更新

這裡說的「資料集」,就是 Server 端的資料集

當你自己控制 Server 端資料集的 Open / Close 時,極容易因為疏忽而忘了關閉,導致更新失敗

最簡單的方法就是
  1. 只要控制 ClientDataSet 的 Open / Close
  2. 要執行 ClientDataSet.ApplyUpdates() 之前,先執行 SQLConnection.CloseDataSets()
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
feng2939
一般會員


發表:22
回覆:30
積分:15
註冊:2013-03-26

發送簡訊給我
#10 引用回覆 回覆 發表時間:2013-04-18 17:37:54 IP:220.130.xxx.xxx 訂閱
非常感謝, sryang 及 GrandRURU 不斷的提供解決方法.
1. 因是初學者, 都是用 Delphi 基本的元件在 Try, 還沒開始寫程式, 用到 open SQLTable 及 open ClientDataSet
2. 安裝了 server 2008 r2 Native client
3. 加了一段 SQLConnection1.CloseDataSets() , 一切都 OK 了, 問題解決了.

這裡的人, 都很熱心, 很喜歡這兒...

===================引 用 sryang 文 章===================
自己用程式去 open SQLTable,再 open ClientDataSet,我說的對嗎?

這樣寫是百分之百錯誤的用法,用 DbExpress 時要記住,這是 3-tier 的架構

SQLTable / SQLQuery / SQLDataSet 與 DataSetPrivider 是「Server 端」

ClientDataSet 是「Client 端」

Open / Close 等操作,只須針對 Client 端操作就可以,Server 端會自動跟著 Open / Close

另外,連接到 SQL Server 時,連線會被正在開啟的資料集鎖住,無法更新,要把已開啟的資料集關閉才可以更新

這裡說的「資料集」,就是 Server 端的資料集

當你自己控制 Server 端資料集的 Open / Close 時,極容易因為疏忽而忘了關閉,導致更新失敗

最簡單的方法就是
  1. 只要控制 ClientDataSet 的 Open / Close
  2. 要執行 ClientDataSet.ApplyUpdates() 之前,先執行 SQLConnection.CloseDataSets()
------
DVF
系統時間:2017-12-15 4:49:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!