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

midas 的問題

缺席
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-03-09 13:46:02 IP:59.120.xxx.xxx 未訂閱
請問各位:

誰能救救命~~~

server端 DataSnap
手機端 FireDAC

延續上一個分享的議題, 雖然終於解決 firedac crash 的問題, 但這幾天什麼都沒有動到, 只是持續的編譯, 以及改一些無關緊要的 code, 突然
手機程式一直進不去,只要啟動到mainform, 就是一片黑, 又花了好多天追蹤, 發現是手機端要開啟 server端的 Datasnap 時, 出現(以debug模式偵測)
xxx can not load 'midas.dll'.... (在手機端)
實在令人納悶, 怎麼又來了, 之前都沒有問題, 真的是很突然, 元件也都重置, 也沒有用, 又搞了好幾天, 把 xe7 的 midas.dll 放到 windows\system32 (x64) 或者 syswow64(x86), 更甚至直接放到 server端的 exe 同路徑, 都是找不到xxx,
後來, 在 server端程式直接掛 users midaslib, 這個問題才解決,
我納悶的不是要加掛 midaslib, 而是寫了一年多的程式, 也使用一年多, 從來不曾出現這個訊息, 為什麼這個時間點才出現, datasnap 的 code, 一個字元也沒有改過, why? why? why?
那, 那天已加掛 midaslib 會不會也出問題,
因為上面的問題解決了, 但 前帖po的問題又再度出現, 前端 firedac, 如果是空資料庫可以開啟, 但只要裡面存有任何記錄, 一open, 就立刻 access error... 不斷在出現, 要關還不太好關
開始讓我對 DataSnap, fireDac 失去信心, 好多問題我都不知道要如何解決!

Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-03-09 14:19:38 IP:125.227.xxx.xxx 訂閱
Uses MidasLib 即可。
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
編輯記錄
Jasonwong 重新編輯於 2019-10-30 09:49:34, 註解 無‧
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-03-09 16:42:05 IP:120.236.xxx.xxx 訂閱
我没有在手机上使用过 FireDAC. 如果你要把 DataBase 比如 SQLite 或者 MYSQL 放到手机里面,可能需要用 FireDAC。

但手机的容量有限,放不了太多 Data。所以,通常应该是把 Data 放在外面的 PC 伺服器里面,手机这边只需要用 ClientDataSet 就好了。就算手机这边需要本地保存一些 Data,建议用 ClientDataSet.SaveToFile 和 ClientDataSet.LoadFromFile 来解决这个问题。

这样,手机这边的程式的麻烦程度降低很多,也就不容易出问题了。

当然,目前我还没有做过很复杂的手机程式,只是简单地测试了一下:

1. 在 WINDOWS 里面,用 FireDAC FireBird 做一个 WebService Server;
2. 在手机这边,做一个 WebService Client 向 windows 抓数据,抓来的数据放进 ClientDataSet。

手机这边剩下的问题就是如何操作 ClientDataSet 了。和传统的 Windows 底下的 3 Tiers 的玩法一样。

暂时我这样写的测试程式,跑起来没什么问题。
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-03-09 23:18:32 IP:220.136.xxx.xxx 未訂閱
感謝兩位指導, 

先說明一下, 下午不知道怎麼測, 竟然又好了, 但這又有分
我在 HTC 816 上是 OK的, 在 HTC 610 上是不行的, 在 MTxx 的晶片的平板上(聯發科)也不行
原文 Access violation at address 53D9E07A accessing address 0000000C
不知有沒有解?
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-03-10 10:38:54 IP:120.236.xxx.xxx 訂閱
AV 错误,通常是 CODE 操作到不存在的物件或者 Pointer 跑乱了导致的。需要定位到是执行到哪个位置才好说。

你可以逐步缩小范围去定位它。比如加一个 try ... except 包围住它,然后逐步缩小 try ... except 的范围。最后看能定位到是哪行 CODE 出的问题不。
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-03-10 12:13:28 IP:220.136.xxx.xxx 未訂閱
昨天晚上又編譯了至少20次, 竟然全部都好了!
七月半還沒到, 撞鬼了!

但本帖有關主要 midas 的問題, 我仍然沒有辦法找到答案! 目前是直接 uses midaslib 解決,
但疑問的是, 一年多來沒有uses midaslib 都ok, 只是在這幾天突然發生錯誤, 作業的電腦環境沒有任何改變(也沒有進行update)
只能當成世紀疑案囉, 謝謝各位的指導!
===================引 用 pcplayer99 文 章===================
AV 错误,通常是 CODE 操作到不存在的物件或者 Pointer 跑乱了导致的。需要定位到是执行到哪个位置才好说。

你可以逐步缩小范围去定位它。比如加一个 try ... except 包围住它,然后逐步缩小 try ... except 的范围。最后看能定位到是哪行 CODE 出的问题不。

編輯記錄
P.D. 重新編輯於 2015-03-10 12:16:31, 註解 無‧
leveon
資深會員


發表:30
回覆:389
積分:303
註冊:2012-02-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2015-03-10 14:01:47 IP:1.171.xxx.xxx 訂閱
midas.dll 是隻COM 程式 就如同一般COM程式一樣 註冊一下就好了
你的問題不過是系統的註冊檔錯亂 再補註冊一次就好了

1.拿掉 Use midaslib
2.命令列模式 C:\regsvr32 C:\xxxx\midas.dll

請google regsvr32


當然 Use midaslib 還是比較好的做法



===================引 用 P.D. 文 章===================
昨天晚上又編譯了至少20次, 竟然全部都好了!
七月半還沒到, 撞鬼了!

但本帖有關主要 midas 的問題, 我仍然沒有辦法找到答案! 目前是直接 uses midaslib 解決,
但疑問的是, 一年多來沒有uses midaslib 都ok, 只是在這幾天突然發生錯誤, 作業的電腦環境沒有任何改變(也沒有進行update)
只能當成世紀疑案囉, 謝謝各位的指導!
===================引 用 pcplayer99 文 章===================
AV 错误,通常是 CODE 操作到不存在的物件或者 Pointer 跑乱了导致的。需要定位到是执行到哪个位置才好说。

你可以逐步缩小范围去定位它。比如加一个 try ... except‚ 包围住它,然后逐步缩小 try ... except‚ 的范围。最后看能定位到是哪行 CODE 出的问题不。

P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2015-03-10 21:12:29 IP:59.120.xxx.xxx 未訂閱
leveon兄

這部份我有進regedit 中查證過, 也知道 原先的 midas 指定在那裡, 但我把 xe7 的 midas.dll 放在那個指定位置也是一樣讀不到,
而且這個註冊好久沒有改變過了, 這就是我納悶的地方!

===================引 用 leveon 文 章===================
midas.dll 是隻COM 程式 就如同一般COM程式一樣 註冊一下就好了
你的問題不過是系統的註冊檔錯亂 再補註冊一次就好了

1.拿掉 Use midaslib
2.命令列模式 C:\regsvr32 C:\xxxx\midas.dll

請google regsvr32


當然 Use midaslib 還是比較好的做法



===================引 用 P.D. 文 章===================
昨天晚上又編譯了至少20次, 竟然全部都好了!
七月半還沒到, 撞鬼了!

但本帖有關主要 midas 的問題, 我仍然沒有辦法找到答案! 目前是直接 uses midaslib 解決,
但疑問的是, 一年多來沒有uses midaslib 都ok, 只是在這幾天突然發生錯誤, 作業的電腦環境沒有任何改變(也沒有進行update)
只能當成世紀疑案囉, 謝謝各位的指導!
===================引 用 pcplayer99 文 章===================
AV 错误,通常是 CODE 操作到不存在的物件或者 Pointer 跑乱了导致的。需要定位到是执行到哪个位置才好说。

你可以逐步缩小范围去定位它。比如加一个 try ... exceptƒ‚‚ 包围住它,然后逐步缩小 try ... exceptƒ‚‚ 的范围。最后看能定位到是哪行 CODE 出的问题不。

GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2015-03-10 21:36:57 IP:42.72.xxx.xxx 未訂閱
也可能是釋放順序的問題

試著在Server主單元uses加入「DBClient」看看
編輯記錄
GrandRURU 重新編輯於 2015-03-10 22:12:24, 註解 無‧
leveon
資深會員


發表:30
回覆:389
積分:303
註冊:2012-02-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2015-03-10 23:21:21 IP:220.132.xxx.xxx 訂閱
同意加入DBClient
但猜測原因可能不是釋放 而是還沒完成載入midas.dll
就有Client連入的thread開始使用midas.dll的程式
自然server 拋出can not load 'midas.dll' 給前端app

在server的主Form 放個Clientdataset
讓server 啟動的時候 就自動載入midas.dll
不用等有Client連入再去找 可能能解答這個"世紀懸疑"

===================引 用 GrandRURU 文 章===================
也可能是釋放順序的問題

試著在Server主單元uses加入「DBClient」看看
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2015-03-11 01:12:02 IP:114.32.xxx.xxx 訂閱
至server side 需要用到 midas 的主因是 Provider 。原則上在叫用 TDataSetProvider.CreateDataPacket時,會需要 midas com元件中的CLSID_DSWriter 介面,於是com會被建立 ,此時若com沒被註冊正常,就會出現midas.dll錯誤訊息。當然,若使用了靜態的lib就不會依賴註冊,也不會有那訊息。而provider何時會被叫? 當然是 client端的程式(手機)連入時,要求資料的時候。所以,個人覺得關鍵還是在 com 是否正常被註冊 !

假如我把dll又自己聰明的放在 embarcadero下的某registry說的位置,可能就更亂了…

於是,我覺得問題的解法之一是:

1/ 找registry 所有關於 midas.dll 的註冊位置,然後確定那些地方都「唯一 syswow64下有 midas.dll.
2/ 依情形置換 syswow64下的那個midas.dll (若已經亂了)

而為什麼 pd 最後用了 midas lib 會好了? 因為…那樣就不會有 dll hell 的問題啦 ! 用哪個ide,自然就會配出正確的 midas dcu !!!

最終,大家都一致會認為… 沒錯! 用 靜態的 midas lib 就沒有這些狗屎 註冊 dll hell 的問題!

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2015-03-11 01:35:30, 註解 無‧
aftcast 重新編輯於 2015-03-11 01:49:41, 註解 無‧
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#12 引用回覆 回覆 發表時間:2015-03-13 23:23:48 IP:61.223.xxx.xxx 未訂閱
引出了蕭大, 真不好意思! 
的確, 蕭大說的都沒有錯, 但我這邊遇到的鬼打牆卻不是各位想的那樣,
我說了, 當天編譯大半天都沒問題, 而是非當突然就這樣了(這是在上一次可以執行, 下一次就掛了的狀況)
就好比, 電腦沒重開機都沒有問題, 但突然給它來的重開機, 結果開不起了,
而事後再查看程式, 的確我沒有加掛 MIDASLIB, 加上去就好了, 但這該如何解釋呢?
這一切都是在當天發生, 所以要說 MIDAS.DLL 有被改掉或路徑不對, 都無法自圓其說
===================引 用 aftcast 文 章===================
至server side 需要用到 midas 的主因是 Provider 。原則上在叫用 TDataSetProvider.CreateDataPacket時,會需要 midas com元件中的CLSID_DSWriter 介面,於是com會被建立 ,此時若com沒被註冊正常,就會出現midas.dll錯誤訊息。當然,若使用了靜態的lib就不會依賴註冊,也不會有那訊息。而provider何時會被叫? 當然是 client端的程式(手機)連入時,要求資料的時候。所以,個人覺得關鍵還是在 com 是否正常被註冊 !

假如我把dll又自己聰明的放在 embarcadero下的某registry說的位置,可能就更亂了…

於是,我覺得問題的解法之一是:

1/ 找registry 所有關於 midas.dll 的註冊位置,然後確定那些地方都「唯一 syswow64下有 midas.dll.
2/ 依情形置換 syswow64下的那個midas.dll (若已經亂了)

而為什麼 pd 最後用了 midas lib 會好了? 因為…那樣就不會有 dll hell 的問題啦 ! 用哪個ide,自然就會配出正確的 midas dcu !!!

最終,大家都一致會認為… 沒錯! 用 靜態的 midas lib 就沒有這些狗屎 註冊 dll hell 的問題!

herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#13 引用回覆 回覆 發表時間:2015-03-14 08:43:20 IP:202.39.xxx.xxx 訂閱
電腦重新開機就出問題?會不會是 Windows Update?

我也發生過 HP Officejet 以 Local Lan 連線,用很久了,未曾煩我。
有一天, Windows Update 重新開機後無法列印,但 ping 得到;
診斷程式顯示,正在將 SLP 要求傳送至 Printer 但未能收到回應!
不想耗太多時間窮究,沒做任何其他處置,直接 run printer 程式集的新增裝置,
結果就正常了!

系統越來越複雜,不像以前還去研究 DOS 的 Interrupt,Disk FAT 等,
出了『撞』況,就有賴蕭大俠等熱血人士鑽研解惑了!
shchen
一般會員


發表:12
回覆:27
積分:7
註冊:2003-08-13

發送簡訊給我
#14 引用回覆 回覆 發表時間:2019-10-30 09:46:57 IP:122.147.xxx.xxx 未訂閱
有時,很有可能是防毒軟體誤把程式認為可欵行為,運行被攔截了,引發世記之謎,這時防毒軟體可能沒有提示任何消息,試著查看防毒軟體的攔截歷程,並設為例外.
系統時間:2024-05-15 7:40:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!