1

アクセスデータベースには、起動時に呼び出される小さな関数があり、バーコードを生成するためのソフトウェアを登録します。

ソフトウェアがインストールされていない場合、Microsoft Accessランタイムエラーが発生するため、問題の原因をユーザーに通知する適切なエラー処理を追加したいと思います。

この関数は起動時にマクロから呼び出され、エラー処理が正しく機能するのではなく、データベースをクラッシュさせます。

エラー処理は正しくありませんか?

Public Function LicenseTBarCode()
On Error GoTo Err_LicenceTBarCode

Dim TB As New TBarCode10
TB.LicenseMe "<EXPUNGED>", eLicKindSite, 1, "<EXPUNGED>", eLicProd1D
Set TB = Nothing
Exit Function

Err_LicenceTBarCode:
MsgBox "TBarcode Software is not installed. Please contact the database administrator.", vbExclamation, Error
DoCmd.Quit
End Function
4

1 に答える 1

3

遅延バインディングを使用するようにコードを変更します。

Public Function LicenseTBarCode()
On Error GoTo Err_LicenceTBarCode

    Dim TB 
    Set TB = CreateObject("TBarCode10.TBarCode10")
    TB.LicenseMe "<EXPUNGED>", eLicKindSite, 1, "<EXPUNGED>", eLicProd1D
    Set TB = Nothing
    Exit Function

Err_LicenceTBarCode:
    MsgBox "TBarcode Software is not installed. Please contact the database administrator.", vbExclamation, Error
    DoCmd.Quit
End Function

これがうまく機能するためには、使用している可能性のある他のTBarCodeオブジェクトを含め、すべてのTBarCodeコードに遅延バインディングを使用する必要があります。遅延バインディングにまだ慣れていない場合、特にファクトリパターンを使用するクラスを使用している場合は、最初に理解するのが少し難しい場合があります。

遅延バインディングを使用すると、DLLへの参照のチェックを外し、コードをエラーなしでコンパイルする必要があります。IntelliSenseにアクセスできないため、遅延バインディングを使用した開発は困難な場合があります。アーリーバインディングを使用して開発し、後でコードをレイトバインディングに変換するのが最適です。

遅延バインディングで失われるもう1つのことは、元のオブジェクトで定義された定数です。これらは自分で作成する必要があります。使用する必要のある数とそれらを使用する必要がある場所によっては、これらの定数を保持するためだけにモジュールを作成するのが最も簡単な場合があります。実際には、コードで実際に使用されている定数のみが必要です。

Global Const eLicKindSingle = 1 'Single license for exactly one computer
Global Const eLicKindSite = 2 'Site license for an arbitrary number of computers within one site (or one facility) at one legal address
Global Const eLicKindDeveloper = 3 'Developer license for redistribution to 3rd party
Global Const eLicKindWeb = 3 'Web-server license 

Global Const eLicProd1D = 32 '(1D codes)
Global Const eLicProd2D = 33 '(2D codes)

または、定数に含まれている値を使用することもできます。例えば:

TB.LicenseMe "<EXPUNGED>", 2, 1, "<EXPUNGED>", 32

また、私の知る限り、遅延バインディングはActiveXコントロールでは機能しません。ActiveXコントロールは本質的に早期にバインドされます。

この問題を処理する別の方法があります。メインデータベースの前提条件のいくつかを処理する「スターター」データベースファイルを使用します。このスターターデータベースは参照を使用しません。ファイルシステムをチェックして、正しいファイルがインストールされているかどうかを確認するだけです。そうでない場合は、正しいエラー/警告を含むメッセージボックスがポップアップ表示され、書き込まれたロジックに応じて、メインデータベースファイルを実行するか、実行しないことを選択します。これは、遅延バインディングの使用を回避する1つの方法です。

于 2012-06-12T11:38:34.333 に答える