私のアプリケーションは、VB.NETのスキャンMS Accessデータベースに組み込まれています。参照をプログラムによって追加/削除する方法は?
アクセスアプリケーションがエンドユーザーに配布されると、異なるバージョンのCOMコンポーネントが存在することがあります。異なるバージョンのために壊れた参照を解決するために参照をプログラムで追加/削除することは可能ですか?
私はコードまたはリンクを参考にしてください。ここで
私のアプリケーションは、VB.NETのスキャンMS Accessデータベースに組み込まれています。参照をプログラムによって追加/削除する方法は?
アクセスアプリケーションがエンドユーザーに配布されると、異なるバージョンのCOMコンポーネントが存在することがあります。異なるバージョンのために壊れた参照を解決するために参照をプログラムで追加/削除することは可能ですか?
私はコードまたはリンクを参考にしてください。ここで
は、いくつかのサンプルコードです:
リファレンス
Sub DeleteRef(RefName)
Dim ref As Reference
'You need a reference to remove '
Set ref = References(RefName)
References.Remove ref
End Sub
You can use the references collection to find if a reference exists.
リファレンス
が存在するファイル削除 からSub AddWS()
'Create a reference to Windows Script Host, '
'where you will find FileSystemObject '
'Reference name: "IWshRuntimeLibrary" '
'Reference Name in references list: "Windows Script Host Object Model" '
ReferenceFromFile "C:\WINDOWS\System32\wshom.ocx"
End Sub
Function ReferenceFromFile(strFileName As String) As Boolean
Dim ref As Reference
On Error GoTo Error_ReferenceFromFile
References.AddFromFile (strFileName)
ReferenceFromFile = True
Exit_ReferenceFromFile:
Exit Function
Error_ReferenceFromFile:
ReferenceFromFile = False
Resume Exit_ReferenceFromFile
End Function
を参照を作成します
Function RefExists(RefName) Dim ref As Object RefExists = False For Each ref In References If ref.Name = RefName Then RefExists = True End If Next End Function
:http://wiki.lessthandot.com/index.php/Add,_Remove,_Check_References
を読むために望むことができる最善の解決策は、内部アクセスコンポーネントへのアクセスMDB内の参照を制限することです。これは、Accessリファレンス、VBAリファレンス、およびDAOリファレンスになります。他の外部の図書館はすべて、レイトバインディングで使用する必要があります。あなたは、これに代えて、例えば、ファイルシステムオブジェクトを使用している場合(Windowsスクリプトホストオブジェクトモデルを参照して):
Dim objFSO As New FileSystemObject
If objFSO.FolderExists("\\d9m09521\WB\") Then
...
End If
あなたは、参照を削除しますし、これに変換します
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists("\\d9m09521\WB\") Then
...
End If
FSOを使用するたびにFSOを初期化する際のパフォーマンスが懸念される場合は、FSOへの参照をキャッシュすることができます。私は通常、このようなオブジェクトを返すために、関数内静的変数を使用します。
Public Function FSO() As Object
Static objFSO As Object
If objFSO Is Nothing Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
End If
FSO = objFSO
End Function
さて、あなたはあなたが何かをしたい、その場合には、ファンシー取得し、また、オブジェクトのインスタンスを取り壊すことができるようにしたいかもしれませんこのように:いずれにしても
Public Function FSO(Optional bolCloseObject As Boolean = False) As Object
Static objFSO As Object
If bolCloseObject Then
Set objFSO = Nothing
Exit Function
End If
If objFSO Is Nothing Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
End If
FSO = objFSO
End Function
、全体のポイントは、遅延バインディングが実行時に外部のライブラリの場所を解決することであり、従って、外部のライブラリがインストールされていないか、正しく登録されていない場合を除いて、中断されません。レイトバインディングでは、これらの条件の両方をトラップできますが、初期のバインディングでは、Accessアプリケーション全体が壊れます。
このロジックを実装する際にエラーが発生します。次のようにしてください: "オブジェクトリファレンスがオブジェクトのインスタンスに設定されていません" ありがとうございました... – Suman
このエラーはどのラインで発生していますか? – Fionnuala
"Dim ref As References"で上記のエラーが発生し、次のようなエラーが発生しました。 Dim ref as new参照エラーが "CLSIDのコンポーネントのCOMクラスファクトリを取得しています{EB106214-9C89-11CF-A2B3-00A0C90542FF }次のエラーのため失敗しました:80040154" – Suman