« Riga-Fede Disease ほぼ完治 | トップページ | オレゴン健康科学大学訪問記2008 (9) Sky Lakes Medical Center »

2009年3月 9日 (月)

久々のVBAプログラミング

 本格的な開発としては10年振りに Microsoft Access でのアプリケーションのプログラミングを行っています。新規に導入したオーダリングシステムと連携できる、人間ドックシステムの良い(&安い)ソリューションが無いため、とりあえず自分で作ってしまおうという経緯。
 オーダリングシステムの方から患者基本台帳と検体検査の結果データをCSVで出力する VB script は、業者さんの方で用意していただきました。これを VBA の shell 関数で呼び出して、出力された CSVファイルを外部データベースとして取り込むという算段。
 すっかり VBA の基礎を忘れていて、最初のうちはコードとマクロのちゃんぽんで酷いプログラムでしたが、だんだん文法を思い出してそれなりにきっちりと組めるようになってきました。
 ある程度きちんと動くようになってきたので、runtime 環境で動かしてみたところ、フル機能版 Access ではきちんと動作するものが、何故かうまくいきません。ADOオブジェクトで新しいレコードを追加した後、フォームを開いてみると追加したレコードが表示されないのです。しかしF5キーを押して更新すると表示されるので、レコードの追加自体はきちんとできているようです。form オブジェクトに対して、requery やら refresh やら repaint やらのメソッドを実行させてみますが、やっぱりうまくいかない。
 ADO からのレコードの追加に時間がかかり、フォームを開いた時点ではまだ処理が完了していないのではないかと推測しました。とすれば、レコードの追加が完了するまで、フォームが開くのを待機させれば良いと言う事になります。
 昔昔のBASICプログラミングでは、For - Next 構文で空ループを作って時間稼ぎをするという手は良く使われていたのですが、最近のプロセッサの処理速度は早いので、中途半端な For - Next ループを挟んでも一瞬で処理が終わってしまうようで、時間稼ぎになりません。何かいい方法は無いか…。ここが知恵の使い所。予め Dcount 関数でフォームのレコードソースのレコード数を取得しておき、それが +1 になるまで、Do - Loop 構文で待ったをかける処理を追加したところ、ようやくうまくいきました。
 久々のVBAでのプログラミングは、なかなか良い頭の体操になっています。

|

« Riga-Fede Disease ほぼ完治 | トップページ | オレゴン健康科学大学訪問記2008 (9) Sky Lakes Medical Center »

パソコン・インターネット」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: 久々のVBAプログラミング:

« Riga-Fede Disease ほぼ完治 | トップページ | オレゴン健康科学大学訪問記2008 (9) Sky Lakes Medical Center »