久々の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でのプログラミングは、なかなか良い頭の体操になっています。
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- AQUOS XX (404SH)のフリーズは結局初期化で解消(2017.06.11)
- AQUOS XX (404SH)のフリーズがやや改善?(2017.03.13)
- 私とパソコン13 親指シフト入力と、Japanist(2012.04.16)
- 久々のVBAプログラミング(2009.03.09)
- Think Pad R40e のキーボードを交換する(2009.01.25)
「日記・コラム・つぶやき」カテゴリの記事
- Tokyo2020一周年@国立競技場(2023.01.04)
- Enjoy the Girl は無いっしょ(2016.06.08)
- 気がかりな台風12号(2015.07.20)
- 浦安市消防出初式(2014.01.12)
- 撓骨神経麻痺になる(2013.10.05)
コメント