目覚ましをかけ忘れていつもより30分遅く起きた。
 会社に行って、他の仕事が入ったのと、
必要なHardware が届いていなくって、
一時Pending になっていた仕事を再開しはじめる。
以前に届いた Hard が使えないものだったが、
今回の Hard はばっちり動いた。
・・・でも、NaruTo の作ったプログラムは動かなかった。
シクシク。前途多難である。

 で、その Debug をするまえに、一方の昨日までやってた仕事が、
仕様変更・仕様判明・Bug などでまた携わる必要が出てきた。シクシク。
その中に Access の Project File を Adp で提供していたのを Ade で
提供するというのがあった。
これは手でするのは簡単である。
しかし、外部のプログラムが Adp を Ade に変換する作業を行うのは困難である。
あきらめて、手で変換作業をするようにした。とりあえず・・・。

 お昼は定番「ヤマサキ」の「マロン&マロン」

 シャツの洗濯をしなければならないので定時に退社。
帰りに本屋で番外地 貢先生の漫画が載っている本を買った。
家に帰り、コインランドリーで洗濯物をセット。
帰りに近所の祠にお参り・・・で蚊にさされまくる。
お米を炊こうとしたら1合にすこし足りないくらいしか無かったので、
おかずをラーメンにしようと思いたつ。
ある分でご飯を炊飯器にセットして、近くのお米の販売機にあたらしいお米を買いに行く。
それからコインランドリーから洗濯物の回収。
で、インスタントラーメンを作ろうとしたら切れていたのでこれも買いに行く。

 ご飯を食べた後、ADP から ADE への変換の自動化のためのプログラムを作りに行く。
もともと、開発環境から配布用にするために
Access の Module File を VBS で書き換えて
Version番号を書き込むようにしていた。
プログラムで ADP を ADE に変換する方法は、
Microsoft の Knowledge Base ID: Q202039
「ACC2000: How to Programmatically Save a Database as an MDE File」
にあるように、

(AccessObject).DoCmd.RunCommand acCmdMakeMDEFile

を使うが、ファイル名を入力する dialog で止まってしまう。
KB Q202039 では予め SendKeys で Key buffer に文字をためておく方法で
解決しているが、これが有効なのは Access内で実行するばあいでだけである。

で、次のような手順を考える。

  上記の Command を発行する前に 別の Process を生成し、
  そのプロセスでファイル名を入力する Dialog が開くのを監視して
  開いたらファイル名を入力するして終了するスクリプトを実行する。

 QA だった時に磨いた Automated Testing の技術である。
(ってほど大したことではない)
 ここで、Dialog が開くのを監視するために Windows API の 「FindWindowEx」 を
使おうとした。が、VBS では VBA と違って Declare で Windows API を
使えるようにすることができないことが判明。
 ここで、さらに暴走。「FindWindowEx」を Wrap する
Automation Object を作ることにする。
Automation Object は VC++ 6.0 で ATL を使って作ったことがあるが、
今回は Delphi 5 を使ってみる。
 初めてだから、試行錯誤があったが、なんとか一応出来た。
つくづく、Delphi はすごいと感じる。・・・でも、うまく動かない。
なんでだぁ・・・ってしらべたら原因は OLE で渡した文字列は Delphi では
WideString になるが、それを WindowsAPI に渡すときに
ANSI用関数で ANSI文字列としてPCharに Cast して渡していたためだった。
WideChar用関数で、PWideChar に Cast して実行したらきちんと動いた。
・・・・で、今日はここまで。続きは明日。元QA の本領発揮なるか?。


コメント