Accessランタイム環境はシビア

access2016で簡単なシステムを作成して納品した所
お客様から

Officeの導入されていないPCへAccess2016ランタイムをインストールしてテストしたところ
エラーになってしまい、起動すらできない状態です。

「実行時エラーが発生したため、このアプリケーションの実行は中断しました。
アプリケーションを続行できません。システムはシャットダウンされます。」

という報告を受けて調査しました。
そもそも今回のシステムは凄く簡単な画面で、メニュー画面と実行ボタンしかないのです。
エラーは起動時に発生するというので起動時の処理を見ても
簡単なことしかしていなくて、しかもそのソースコードは、今まで使いまわして使ってきたソースなのでびっくり。

access2016ランタイムは以前のランタイムよりチェックが厳しくなったのか?
はっきりしたことはわかりません。わからないけれど見直した箇所は以下の通り

Set rec = db.OpenRecordset(strSql, dbOpenDynaset)

If rec.EOF = False Then
End If

としていた所を

Set rec = db.OpenRecordset(strSql)

If rec.EOF = False Then
End If

に変更したらエラーが発生しなくなりました。
ちなみにaccess本体がインストールされている環境ではエラーになりません。
あくまでもaccessランタイム2016環境のみ

ということは、今まで作成したaccessたち
ランタイム2016環境にしたら動かないのかな~と思うと怖い。

OpenRecordsetの引数を指定しないとdbOpenTableがデフォルトになったと思います(確か)
dbOpenDynasetでEOFってダメなんだっけ?accessではDAOよりADOでやることが多かったから
この辺は本当に記憶曖昧。

コンパイルエラーは発生していないし変数宣言もちゃんとしている
access本体がインストールされている環境では動くのにランタイムでは動かないっていうのは
本当に勘弁してほしい。

コメント

タイトルとURLをコピーしました