misc.log

日常茶飯事とお仕事と

ActiveX.EXEでのADO利用

客先機材取替えと動作検証の日取りをまとめた。主業務の1つであるテスト作業を今日で片付ける予定。進捗報告がまだなので、午後にまとめる。
午後になって、先日からの問題をActiveX DLLで対応できないかという検証を開始。出来るかと思ったらダメだった。仕方ないので、ActiveX EXEで別プロセスとして作成することを試行。試行といいながら、そのまま製作に突入。3時間半で現行のクラスとフォームを別プロセス化することに成功した。
1点だけ疑問が。これまで問題なく動いていた、ADOを利用したDBからのデータ取得処理が、ActiveX EXE化したとたんに
「引数が間違った型、許容範囲外、または競合しています」
というエラーと共に落ちるようになってしまった。原因をMSDNで調べたところ、http://support.microsoft.com/default.aspx?scid=kb;JA;308499 という情報に行き当たった。.NETでの現象だが、ActiveConnectionへの値の渡し方によっては問題が出るらしい。一応コネクション型(ADODB.Connection)を渡しているのだが...
仕方ないので、

【元の処理】
Call po_RecordSet.Open(SQLStr, po_Connect, ADODB.CursorTypeEnum.adOpenForwardOnly) 
【変更後の処理】
Set po_RecordSet = po_Connect.Execute(SQLStr, , ADODB.CommandTypeEnum.adCmdText) 

と書き換えることで対応できた(変数名が妙なのは、妙なコーディング規則のせい)。
ActiveX EXE作成は、KIOSK端末のRS-232Cポート監視モジュールを作った2000年のCEATEC以来。デバッグの方法など完全に忘却しており、そのせいもあって3時間半もかかってしまった。