在COM+上使用ADO物件存取Access資料庫問題 |
尚未結案
|
jamhey
一般會員 發表:2 回覆:1 積分:0 註冊:2004-07-24 發送簡訊給我 |
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...)也會被釋放掉, 造成與上面訊息同樣的問題, 請問這是怎樣的情形呢? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |