Query open會掛掉 |
缺席
|
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
|||
wuabc
初階會員 發表:6 回覆:60 積分:33 註冊:2002-10-28 發送簡訊給我 |
|||
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
|||
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
引言:問題解決了,不要將Remote Data Module的Threading Model設為 Apartment就行了,但是為什麼會這樣呢,有前輩可以指點迷津嗎, 謝謝引言: 比較可能的原因是ADOQuery正在等待DB的Login 如果是的話,論壇上應不難找到solution Ted Wu非常感謝前輩的回答,小弟現在改在ADOConnection的OnConnectComplete下 ADOQuery.Open,一樣還是hold住,所以小弟想應該不是這問題,但小在Button 的Onclick下ADOQuery.Open就正常 P_P~~~ |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 現在問題已解決了,原來是不要將Threading Model設為Apartment, 就行了,為什麼會這樣不曉得何兄是否能指點迷津,感激不盡,謝謝我是都設為Apartment,也是有你說的這種情況(也就是在RDM的事件做視覺化相關的程式碼(在DBGrid秀資料)就會當掉),所以後來都改用其他方式(例如:寫Function由前端呼叫再做)。 為什麼要設為Apartment,書(Delphi4.0徹底研究)上說明是每次只能處理一個Client的Request,所以所處理的資料是安全的,可是必須防止共用變數的衝突。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
|||
billsons
一般會員 發表:1 回覆:10 積分:2 註冊:2002-04-15 發送簡訊給我 |
我在使用MIDAS开发的时候经常会遇到当使用第一个客户端增加资料后再另一个客户端SHOW不出。我想真正的原因是MIDAS的机制吧。我认为MIDAS当时的提出是BORLAND为两层到三层的解决方案,这只是一个迁移的解决方案。对于解决复杂的三层问题有缺陷。我建议你使用MTS/COM 。因为MTS的机制是在每次要SHOW内容时都要初始化,使用完资源后就RELEASE掉。不过我没有试过就是在MIDAS中模拟MTS的运作机制,但我不确定它是否能解决你的问题。 我想再多说一点,当我们要真正使用多层架构去实现一个系统时我们应该抛弃MIDAS,使用真正的面向对象的分析方法,真正分析出哪些是实体对象、哪些是协调对象、哪些是功能对象。只有这样,我们做出的系统才是最有效率的,同时也是在部署中最容易的。不过在大陆我还没有看到一本书这样讲过,我的上述内容是我看JAVA的EJB时学到的思想,而我把它用在了MTS/COM 上。对于EJB里面有明确的概念,而且现在市面上这样的书也很好找。不如大家把其思想拿来借鉴。 發表人 - billsons 於 2002/11/04 17:20:25
|
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 感謝jieshu兄,小弟已改為您說的方式了,但又出現另一問題了, 我在Type Library裡加一Method為AddUser,當Client一執行程式 就呼叫此Method,此Method是將User的登入資訊Insert到資料庫裡 然後Close再Open,第一個Client連上時會show在DBGrid上,但是第 二個Client連上時,卻Show不出來,但第二個Cleint的資料確實有寫 入資料庫裡,why~~~,好奇怪呀,是那裡小弟忽略了嗎?? 謝謝你可用SQL Server的Profile追蹤看看,但是為什麼要Close再Open呢? 你的DataSet要放在Show的那個Form上,Function直接對此DataSet新增資料即可,並不會有多人無法即時更新問題。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 我在使用MIDAS开发的时候经常会遇到当使用第一个客户端增加资料后再另一个客户端SHOW不出。我想真正的原因是MIDAS的机制吧。我认为MIDAS当时的提出是BORLAND为两层到三层的解决方案,这只是一个迁移的解决方案。对于解决复杂的三层问题有缺陷。我建议你使用MTS/COM 。因为MTS的机制是在每次要SHOW内容时都要初始化,使用完资源后就RELEASE掉。不过我没有试过就是在MIDAS中模拟MTS的运作机制,但我不确定它是否能解决你的问题。 我想再多说一点,当我们要真正使用多层架构去实现一个系统时我们应该抛弃MIDAS,使用真正的面向对象的分析方法,真正分析出哪些是实体对象、哪些是协调对象、哪些是功能对象。只有这样,我们做出的系统才是最有效率的,同时也是在部署中最容易的。不过在大陆我还没有看到一本书这样讲过,我的上述内容是我看JAVA的EJB时学到的思想,而我把它用在了MTS/COM 上。对于EJB里面有明确的概念,而且现在市面上这样的书也很好找。不如大家把其思想拿来借鉴。 發表人 - billsons 於 2002/11/04 17:20:25ClientDataSet.Refresh就可以更新,ccchen兄有提過!你可搜尋看看。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
wuabc
初階會員 發表:6 回覆:60 積分:33 註冊:2002-10-28 發送簡訊給我 |
Midas與MTS所要達成的功能並不一樣所以並無比較的必要,合理的說法應該說你要不要用Midas這組快速元件來建構你的n-Tie程式而已。 cubi兄所遇到的問題,似乎是將RDM的ADOQuery直接連到Main Form上的DBGrid來顯示資料,如此造成第二個Client連接上來的時候DBGrid無法顯現第二個Client的狀態(我又猜錯了嗎?),如果真是這樣,結果當然如您所見,因為兩個Client在不同Thread所致。如果將ADOQuery搬到Form上,再於RDM.AddUser Method內處理 MainForm.ADOQuery.close/MainForm.AdoQuery.Open即可達成 Ted Wu
|
||
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
引言: 你可用SQL Server的Profile追蹤看看,但是為什麼要Close再Open呢? 你的DataSet要放在Show的那個Form上,Function直接對此DataSet新增資料即可,並不會有多人無法即時更新問題。 現在當client上線時會呼叫AddUser(p1,p2,p3...)的Method, 在AddUser裡只寫了幾行: with frmMain.adoLogin do begin if Not Active then Open; Append; end; 但在Server端會出現下面錯誤訊息: 引數可能有類型錯誤,或超過可接受的範圍,或與其它引數衝突。 所以小弟就用SQL CMD將資料Insert到資料庫,所以需close再open |
||
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
引言: Midas與MTS所要達成的功能並不一樣所以並無比較的必要,合理的說法應該說你要不要用Midas這組快速元件來建構你的n-Tie程式而已。 cubi兄所遇到的問題,似乎是將RDM的ADOQuery直接連到Main Form上的DBGrid來顯示資料,如此造成第二個Client連接上來的時候DBGrid無法顯現第二個Client的狀態(我又猜錯了嗎?),如果真是這樣,結果當然如您所見,因為兩個Client在不同Thread所致。如果將ADOQuery搬到Form上,再於RDM.AddUser Method內處理 MainForm.ADOQuery.close/MainForm.AdoQuery.Open即可達成 Ted Wu 沒錯!就如Ted前輩說的這樣,現小弟已如前輩說的已將ADOQuery從RDM搬到 MainForm上了,至於為會要Close再Open如上篇所說明,再次感謝前輩撥空 回答,謝謝 |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言:你可用profiler查看為何重新Open後,有的資料沒有出來。 我認為Close再Open是最不好的方式,既然知道錯誤訊息了,應該想辦法解決,之前有遇過,如果Server Function傳進來的參數宣告為WideString,直接把值給DataSet欄位會有問題,所以就宣告一個字串變數來接這個參數,再把變數值給DataSet。現在當client上線時會呼叫AddUser(p1,p2,p3...)的Method, 在AddUser裡只寫了幾行: with frmMain.adoLogin do begin if Not Active then Open; Append; end; 但在Server端會出現下面錯誤訊息: 引數可能有類型錯誤,或超過可接受的範圍,或與其它引數衝突。 所以小弟就用SQL CMD將資料Insert到資料庫,所以需close再open
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
引言:希望又出現了, 小弟發現若將引言:你可用profiler查看為何重新Open後,有的資料沒有出來。 我認為Close再Open是最不好的方式,既然知道錯誤訊息了,應該想辦法解決,之前有遇過,如果Server Function傳進來的參數宣告為WideString,直接把值給DataSet欄位會有問題,所以就宣告一個字串變數來接這個參數,再把變數值給DataSet。現在當client上線時會呼叫AddUser(p1,p2,p3...)的Method, 在AddUser裡只寫了幾行: with frmMain.adoLogin do begin if Not Active then Open; Append; end; 但在Server端會出現下面錯誤訊息: 引數可能有類型錯誤,或超過可接受的範圍,或與其它引數衝突。 所以小弟就用SQL CMD將資料Insert到資料庫,所以需close再open |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 希望又出現了, 小弟發現若將>>< face="Verdana, Arial, Helvetica"> 那就奇怪了,你不妨改用ClientDataSet來操作看看。我都是這樣做,沒什麼問題的。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
|||
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
小弟現在不用DBGrid來Show了,小弟改用ListView來Show了,就OK了 但是...嗚嗚~~~又有另外一個問題了, 在Client的OnClose會呼叫Server的DelUser()的Method, DelUser只是填入Client的Logout時間這一個動作而已 Client程式 procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin DCOMConnection1.AppServer.DelUser(StrToInt(VarToStr(AutoID))); end; Server的DelUser程式 procedure TMISAPSvr.DelUser(AutoID: Integer); begin with frmMain.adoLogin do begin if Not Active then Open; if Locate('AutoID', AutoID, []) then begin Edit; FieldByName('LogoutDT').AsDateTime := Now; Post; _UpdateShow; end; end; end; 問題如下 ClientA 登入,ClientB 再登入, 然後ClientA 先離開,ClientB 再離開沒問題, 但是ClientB 先離開,ClientA 再離開會出現如下 錯誤訊息: Missing Connection or Connection String |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 會不會是D6的Bug,您是說在MainForm上使用ClientDataSet嗎?? 嗯~~~~~~~,小弟從未用過,不知前輩知道那有參考範例嗎?? 感激不盡我是用Delphi5不曉得。 和你在Client端使用一樣,只是不用指定RemoteServer。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言:那是哪一行出現錯誤,你Debug Server程式看看。這好像是你的ADO要Open,卻沒有Connection or Connection String。小弟現在不用DBGrid來Show了,小弟改用ListView來Show了,就OK了 但是...嗚嗚~~~又有另外一個問題了, 在Client的OnClose會呼叫Server的DelUser()的Method, DelUser只是填入Client的Logout時間這一個動作而已 Client程式 procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin DCOMConnection1.AppServer.DelUser(StrToInt(VarToStr(AutoID))); end; Server的DelUser程式 procedure TMISAPSvr.DelUser(AutoID: Integer); begin with frmMain.adoLogin do begin if Not Active then Open; if Locate('AutoID', AutoID, []) then begin Edit; FieldByName('LogoutDT').AsDateTime := Now; Post; _UpdateShow; end; end; end; 問題如下 ClientA 登入,ClientB 再登入, 然後ClientA 先離開,ClientB 再離開沒問題, 但是ClientB 先離開,ClientA 再離開會出現如下 錯誤訊息: Missing Connection or Connection String
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
引言:引言: 那是哪一行出現錯誤,你Debug Server程式看看。這好像是你的ADO要Open,卻沒有Connection or Connection String。那是哪一行出現錯誤,你Debug Server程式看看 => 是出現在Client的DCOMConnection1.AppServer.DelUser(StrToInt(VarToStr(AutoID))); 這一行 這好像是你的ADO要Open,卻沒有Connection or Connection String => 是的 說也奇怪第一個Client離開沒問題,但似乎在第一個Client離開後, ADOQuery的Connection會不見,所以我在ADOQurey的Open之前先 判斷若沒有Connection就將Connection指定進出,就ok了,但這樣 做好像很奇怪 |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 那是哪一行出現錯誤,你Debug Server程式看看 => 是出現在Client的DCOMConnection1.AppServer.DelUser(StrToInt(VarToStr(AutoID))); 這一行 這好像是你的ADO要Open,卻沒有Connection or Connection String => 是的 說也奇怪第一個Client離開沒問題,但似乎在第一個Client離開後, ADOQuery的Connection會不見,所以我在ADOQurey的Open之前先 判斷若沒有Connection就將Connection指定進出,就ok了,但這樣 做好像很奇怪你這是Debug Client,Debug Server請在Delphi執行Server程式,然後由檔案總管執行Client。 嗯!這我就不是很清楚了,因為我是用BDE,沒有類似問題。 也許是你的Server流程有問題,你的Connection是設固定還是動態指定。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
wuabc
初階會員 發表:6 回覆:60 積分:33 註冊:2002-10-28 發送簡訊給我 |
|||
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |