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

Error Message ~~

尚未結案
Mecer
初階會員


發表:15
回覆:30
積分:29
註冊:2002-10-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-26 16:55:26 IP:211.22.xxx.xxx 未訂閱
「A user transaction is already in progress」 請教各位高手,小弟開發一 ApServer程式,內含數個Remote Data Moudule, 其中一RDM為Parent, 其餘均為Child, 因為在多人資料同時寫入時會發生錯誤 ,因此我調整了Parent & Child RDM 的Instance & Thread配置方式,但總是 會在多人同時寫入時,發生上面的錯誤訊息,不知道有沒有人遇過相同的情況 ?這個訊息的意思是代表什麼? 無論我用TQuery or TAdoQuery都是相同的情況....:(
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-26 17:30:12 IP:203.204.xxx.xxx 未訂閱
引言: 「A user transaction is already in progress」 請教各位高手,小弟開發一 ApServer程式,內含數個Remote Data Moudule, 其中一RDM為Parent, 其餘均為Child, 因為在多人資料同時寫入時會發生錯誤 ,因此我調整了Parent & Child RDM 的Instance & Thread配置方式,但總是 會在多人同時寫入時,發生上面的錯誤訊息,不知道有沒有人遇過相同的情況 ?這個訊息的意思是代表什麼? 無論我用TQuery or TAdoQuery都是相同的情況....:(
這個錯誤訊息是已經下了StartTransaction,又下了一次所產生,BDE的話可加個TSession把Transaction區隔開來,ADO我就不曉得了,Help是說Threading Model要設成Free。
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.taconet.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
Mecer
初階會員


發表:15
回覆:30
積分:29
註冊:2002-10-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-26 17:38:08 IP:211.22.xxx.xxx 未訂閱
引言: [quote] 「A user transaction is already in progress」 請教各位高手,小弟開發一 ApServer程式,內含數個Remote Data Moudule, 其中一RDM為Parent, 其餘均為Child, 因為在多人資料同時寫入時會發生錯誤 ,因此我調整了Parent & Child RDM 的Instance & Thread配置方式,但總是 會在多人同時寫入時,發生上面的錯誤訊息,不知道有沒有人遇過相同的情況 ?這個訊息的意思是代表什麼? 無論我用TQuery or TAdoQuery都是相同的情況....:(
這個錯誤訊息是已經下了StartTransaction,又下了一次所產生,BDE的話可加個TSession把Transaction區隔開來,ADO我就不曉得了,Help是說Threading Model要設成Free。 But我並沒有下StartTransaction指令,是否TClientDataSet的ApplyUpdates方法會自動產生一個Transaction ?
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-26 17:43:29 IP:218.1.xxx.xxx 未訂閱
把代码文件传上来给大家看看     久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
Mecer
初階會員


發表:15
回覆:30
積分:29
註冊:2002-10-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-26 18:20:43 IP:211.22.xxx.xxx 未訂閱
[quote] 把代码文件传上来给大家看看 您好,您指的代碼文件是什麼呢?
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-26 18:29:06 IP:203.204.xxx.xxx 未訂閱
引言: But我並沒有下StartTransaction指令,是否TClientDataSet的ApplyUpdates方法會自動產生一個Transaction ?
那你可Debug看看,錯誤訊息是到程式碼哪一行觸發! 代碼文件應該就是程式碼吧!
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.taconet.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
Mecer
初階會員


發表:15
回覆:30
積分:29
註冊:2002-10-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-12-26 23:00:19 IP:61.229.xxx.xxx 未訂閱
引言: [quote] But我並沒有下StartTransaction指令,是否TClientDataSet的ApplyUpdates方法會自動產生一個Transaction ?
那你可Debug看看,錯誤訊息是到程式碼哪一行觸發! 代碼文件應該就是程式碼吧! 我說明一下我的程式... 首先,我的ApServer程式包含五個RDM, RDM_Main為主要的Remote Data Module, 透過RDM_Main再去動態產生RDM_1, RDM_2, RDM_3, RDM_4。RDM1~4分別使用了 BDE元件(TDataBase, TQuery, TUpdateSQL)以及ADO元件(TADOConnection, TADOQuery), 搭配TDataSetProvider組合而成Application Server程式。 會降子使用是因為這是第一次開發三層式架構的程式,所以二種元件都拿來用 用看。 編譯出一執行檔(ApServer.exe)之後,Client端程式是透過SocketConnection 與Borland的Socket Server程式,連結到我的ApServer.exe, 因為RDM1~4是由 RDM_Main動態產生,因此SocketConnection是連結到RDM_Main, 還得另外再配 置TSharedConnection, 才可以連結到RDM1~4。 問題發生是在我的ApServer程式當中,有一組Master/Detail資料表,總共有 七個資料表,透過TQuery & TDataSource & TQuery &....降子組合起來,只用 了「一個」TDataSetProvider傳送資料給Client端的TClientDataSet,所以當 Client端ApplyUpdate資料時,實際上這一個TDataSetProvider要寫入七個資 料表的資料,同時寫入七個資料表的資料在一台電腦連線時沒有問題,二台電 腦連線同時寫入也沒問題,但是超過二台以上就會發生「A user transaction is already in progress」這個錯誤訊息。 jieshu兄所提到的「Debug」,我也很想!但是ApServer是一個執行檔,執行到 哪一行我也不知道,而且是超過二台電腦以上的連線才會有此錯誤,所以我想 應該是RDM_Main 與 RDM1~4的Instance & Thread配置方式有誤,才會導致如此 的錯誤。
Mecer
初階會員


發表:15
回覆:30
積分:29
註冊:2002-10-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-12-27 16:35:27 IP:61.229.xxx.xxx 未訂閱
或許我在設定上出了什麼問題吧...    Anyway, 我在參考站上高手發表的文章之後,把程式稍微改了一下~~ 原本在Client端資料新增完畢後,是透過TClientDataSet.ApplyUpdate此方法 將全部資料表的資料一起向ApServer傳送,現在我改成去呼叫ApServer提供某 個我自己寫的Procedure,此Procedure是去呼叫TDataSetProvider.ApplyUpdate 方法來更新資料,經過調整,多人同時寫入相同資料表時已經不會有錯誤,但 是~~~~    如果某一個Client端正在寫入資料,假設這些資料表分別為Table_A, Table_B, Table_C, Table_D, 其中Table_A為Master, B為A的Detail, C為B的Detail... 當我有其他的Query是Select * From Table_A時,此時Open會打不開,似乎是 被Lock住?!必須要等到A,B,C,D資料全部寫入完畢之後,才可以Open,請教是 否有哪裡需要調整設定的?    我試過利用TDataBase + TSession + TQuery + TDataSetProvider       以及TAdoConnection + TAdoDataSet + TDataSetProvider 得到的結果是一樣的...
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-12-29 12:30:07 IP:203.204.xxx.xxx 未訂閱
引言: 我說明一下我的程式... 首先,我的ApServer程式包含五個RDM, RDM_Main為主要的Remote Data Module, 透過RDM_Main再去動態產生RDM_1, RDM_2, RDM_3, RDM_4。RDM1~4分別使用了 BDE元件(TDataBase, TQuery, TUpdateSQL)以及ADO元件(TADOConnection, TADOQuery), 搭配TDataSetProvider組合而成Application Server程式。 會降子使用是因為這是第一次開發三層式架構的程式,所以二種元件都拿來用 用看。 編譯出一執行檔(ApServer.exe)之後,Client端程式是透過SocketConnection 與Borland的Socket Server程式,連結到我的ApServer.exe, 因為RDM1~4是由 RDM_Main動態產生,因此SocketConnection是連結到RDM_Main, 還得另外再配 置TSharedConnection, 才可以連結到RDM1~4。 問題發生是在我的ApServer程式當中,有一組Master/Detail資料表,總共有 七個資料表,透過TQuery & TDataSource & TQuery &....降子組合起來,只用 了「一個」TDataSetProvider傳送資料給Client端的TClientDataSet,所以當 Client端ApplyUpdate資料時,實際上這一個TDataSetProvider要寫入七個資 料表的資料,同時寫入七個資料表的資料在一台電腦連線時沒有問題,二台電 腦連線同時寫入也沒問題,但是超過二台以上就會發生「A user transaction is already in progress」這個錯誤訊息。 jieshu兄所提到的「Debug」,我也很想!但是ApServer是一個執行檔,執行到 哪一行我也不知道,而且是超過二台電腦以上的連線才會有此錯誤,所以我想 應該是RDM_Main 與 RDM1~4的Instance & Thread配置方式有誤,才會導致如此 的錯誤。
TSharedConnection我沒有用過,看功能應該是減少Client對Server的Socket連線數,不曉得還有哪些好處,如果沒有的話,不用TSharedConnection反而不會有這樣的困擾。
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.taconet.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-12-29 13:21:23 IP:203.204.xxx.xxx 未訂閱
引言: 或許我在設定上出了什麼問題吧... Anyway, 我在參考站上高手發表的文章之後,把程式稍微改了一下~~ 原本在Client端資料新增完畢後,是透過TClientDataSet.ApplyUpdate此方法 將全部資料表的資料一起向ApServer傳送,現在我改成去呼叫ApServer提供某 個我自己寫的Procedure,此Procedure是去呼叫TDataSetProvider.ApplyUpdate 方法來更新資料,經過調整,多人同時寫入相同資料表時已經不會有錯誤,但 是~~~~ 如果某一個Client端正在寫入資料,假設這些資料表分別為Table_A, Table_B, Table_C, Table_D, 其中Table_A為Master, B為A的Detail, C為B的Detail... 當我有其他的Query是Select * From Table_A時,此時Open會打不開,似乎是 被Lock住?!必須要等到A,B,C,D資料全部寫入完畢之後,才可以Open,請教是 否有哪裡需要調整設定的? 我試過利用TDataBase TSession TQuery TDataSetProvider 以及TAdoConnection TAdoDataSet TDataSetProvider 得到的結果是一樣的... >< face="Verdana, Arial, Helvetica"> 這是資料庫交易的控制,當然要在資料庫做設定(或調整SQL),但應該也可修正程式(設定條件,不要讀出全部資料)調整配合,以下為MSSQL的Help。 SQL Server 查詢最佳化器 (Query Optimizer) 自動做出正確的決定。建議您只有在必要時才使用資料表層級的鎖定提示來變更預設的鎖定行為。不允許鎖定層級可能會嚴重影響並行。 鎖定提示 描述 HOLDLOCK 持有共用鎖定直到交易完成為止,而非在所需的資料表、資料列、或是資料分頁已不再需要時便立即釋放鎖定。HOLDLOCK 相當於 SERIALIZABLE。 NOLOCK 不提交共用鎖定且不重視獨占鎖定。當這個選項發生作用時,在讀取動作進行當中則有可能讀取到未認可的交易或是被復原的一組分頁。Dirty 讀取也有可能。僅套用於 SELECT 陳述式。 PAGLOCK 在單一資料表的鎖定可能被取走之處使用分頁鎖定。 READCOMMITTED 當交易執行於 READ COMMITTED 隔離等級時以相同的鎖定語意 (Semantics) 來進行掃描。預設情況下,SQL Server 2000 運作於這種隔離等級。 READPAST 略過鎖定的資料列。這個選項可使交易略過通常出現於結果集的其他交易所鎖定的資料列,而不是要封鎖交易並等候其他交易釋放對這些資料列的鎖定。READPAST 鎖定提示僅套用於在 READ COMMITTED 隔離等級下運作的交易並且只讀取過去的資料列層級鎖定。僅套用於 SELECT 陳述式。 READUNCOMMITTED 相當於 NOLOCK。 REPEATABLEREAD 當交易執行於 REPEATABLE READ 隔離等級時,以相同的鎖定語意來進行掃描。 ROWLOCK 使用資料列層級鎖定來代替較粗略式的分頁與資料表層級鎖定。 SERIALIZABLE 當交易執行於 SERIALIZABLE 隔離等級時以相同的鎖定語意來進行掃描。相當於 HOLDLOCK。 TABLOCK 使用資料表鎖定來代替較細緻的資料列或分頁層級鎖定。SQL Server 持有這種鎖定直到陳述式結束為止。但如果您同時指定 HOLDLOCK,便將鎖定持有直到交易結束為止。 TABLOCKX 對資料表使用獨占鎖定。這種鎖定讓別人都無法讀取或更新資料表,並且持有資料表鎖定直到陳述式或交易結束為止。 UPDLOCK 讀取資料表時使用更新鎖定而非共用鎖定,並持有鎖定直到陳述式或交易結束為止。UPDLOCK 的優點在於允許您讀取 (不需封鎖其他讀取者) 並於稍後更新資料,且保證自從上次讀取之後資料沒有變更。 XLOCK 使用獨占鎖定並持有直到執行於陳述式所處理之所有資料的交易結束為止。這種鎖定可使用 PAGLOCK 或 TABLOCK 來指定,兩種情況下的獨占鎖定皆套用於最合適的資料點層級。
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.taconet.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-04-30 13:45:04 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-04-27 12:12:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!