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

在COM+上使用ADO物件存取Access資料庫問題

尚未結案
jamhey
一般會員


發表:2
回覆:1
積分:0
註冊:2004-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-23 23:41:08 IP:140.118.xxx.xxx 訂閱
1.在COM (Threading mode : Apartment) 裡我設定了一個DataModule存放需要用到的ADOConnection
ADOQuery等, 當利用SocketConnection連線時, 每一條連線會將COM 裡的DataModule initial出一份供自己
使用(我自己認知是如此), 但目前卻遇到了一個問題, 當我有兩個以上的使用者同時對COM 呼叫了function
去存取資料庫時, 會發生衝突現象, 也就是只允許一個ADOQuery操作, 而其他的ADOQuery 皆會被停止動作
且會出現此種錯誤訊息 cannot perform operation on an open dataset , 並且整個DataModule會直接掛掉, 所
以我另外直接使用兩個獨立的Application(含 ADOQuery, ADOConnection)存取同一個資料庫, 同時存取都不
會出錯, 為什麼在COM 上使用反而會造成衝突, COM 不應該是更安全的嗎?因為每條連線皆有自己的物件
可以使用。

2.也是在COM 使用ADO物件的問題, 當我用兩組ADOConnectino連向不同的資料庫, 卻也會在同時存取資
料庫時(不同資料庫)造成衝突, 想請問是否有人也遇過這種情況呢? 是否有解決方法呢 ?

以上問題, 麻煩大家了, 謝謝



問題我自己解決了, 原來Threading Mode 要用Single才對, 才能每條連線有自己的Process, 這樣以上問題就解決了, 只是又遇到一個新的問題, 若用Single的話, 會使的物件不能放在DataModule裡面, 當new一個DataModule並使用裡面的物件, 會出現 "伺服器丟出一個例外" 的問題, 所以我把有需要用到的物件(如TADOConnection, TADOQuery等)直接做廣域變數宣告, 等連線時才做new的動作, 卻發生當有連線中斷時, 其他的連線的物件(TADOConnection...)也會被釋放掉, 造成與上面訊息同樣的問題, 請問這是怎樣的情形呢?

編輯記錄
jamhey 重新編輯於 2007-11-23 23:42:43, 註解 無‧
jamhey 重新編輯於 2007-11-24 17:27:01, 註解 無‧
系統時間:2024-04-20 19:45:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!