1

私のアプリケーションは Visual Basic 6 で作成されており、Access データベースがあります。VB フォームを追加し、このフォームでデータベースを開いて、その中の DB を編集したいと考えています。私は開くためのこのコードを持っています:

Dim db As DAO.Database

Set db = DBEngine.workspaces(0).opendatabase("c:\ss.mdb")

そのデータベース内にフォームがあります。このフォームにより、データ挿入プロセスが高速化されます。このアクセスフォームを自分のアプリケーションで開きたいです。どうすればいいですか??

注: Microsoft Access 14 オブジェクト ライブラリを使用するこのコードがあります。

Dim appaccess As Access.Application, dbstr As String

On Error Resume Next
Set appaccess = New Access.Application
Set appaccess = CreateObject("Access.Application")
dbstr = "c:\ss.mdb"
'Or dbstr="c:\my documents\yourfile.mdb
'put the correct path here.
appaccess.OpenCurrentDatabase dbstr
appaccess.DoCmd.OpenForm "aa", acLayout
appaccess.Visible = True

しかし、このコードを実行するとフォームが表示され、しばらくすると消えてしまいます。アクセスオブジェクトライブラリを使用するだけでなく、アクセスバージョンの競合が発生します。だから、それは必要ではありませんが、私はADOオブジェクトでそれを行うことを好みます. とにかく、私は自分の問題を解決する方法を探しています。

ご協力ありがとうございました

4

3 に答える 3

1

ADO には、さまざまなデータ ソースとやり取りするためのメソッドが用意されています。Access db ファイルに使用できますが、Access フォームを利用する方法は提供されていません。

現在のアプローチではCreateObject、オブジェクト変数appaccessを新しい Access アプリケーション インスタンスに設定してから、そのインスタンス内でフォームを開きます。ただし、変数がスコープ外になると、Access インスタンスが閉じてフォームが消えます。

Access インスタンスの操作が完了するまで、VB6 コードを修正して、変数をスコープ内に保持することができます。残念ながら、その変更をコードの残りの部分にどのように適合させるかはわかりません。また、VB6 を使用したこともありません。

または、シェル関数を使用して Access インスタンスを開始し、 を使用GetObject()してオブジェクト変数をそのインスタンスに設定することもできます。

このShell()アプローチでは、へのフル パスを指定する必要がありますMSACCESS.EXE。レジストリを読み取ることで、それが配置されているフォルダーを見つけることができます。これを行う VBScript のサンプルを次に示します。これを VB6 に簡単に適用できることを願っています。

Option Explicit
Dim MSAccFolder
Dim RegKey
Dim WSHShell

RegKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\" _
    & "CurrentVersion\App Paths\MSACCESS.EXE\Path"
Set WSHShell = WScript.CreateObject("WScript.Shell")
MSAccFolder= WSHShell.RegRead(RegKey)
WScript.Echo "MS Access Folder: " & MSAccFolder
Set WSHShell = Nothing
于 2012-09-03T16:19:07.340 に答える
1

1 つのことは、ADO ではなく、コードの最初のチャンクで DAO を使用していることです。コードの 2 番目のチャンクには db への参照がないため、おそらくそれは問題ではありません。したがって、コードの最初のチャンクは不必要に見えます。

appaccess に 2 つの set ステートメントがある理由がわかりません。2 番目のステートメントは必要ありません。また、「on error resume next」ステートメントをコメントアウトして、デバッグ中にエラーの原因となっている行を確認することをお勧めします。

于 2012-09-03T10:08:08.867 に答える
1

VB を使用する場合は、Access Automation を放棄して、VB でフォームを作成する必要があります。次に、ADO を使用して Access ファイルを開いて操作します。これは、VB を使用して Access フォームを自動的に開くよりもはるかに効率的です。

于 2012-09-06T20:00:42.443 に答える