2

MS Access データベースに接続し、Access データベースに保存されているすべてのマクロのリストを取得する VB.NET ボタンを作成しようとしています。

リストを取得したら、値をコンボボックスに表示したいと思います。私がやろうとしていることに似たものをオンラインで見つけましたが、マクロのリストを表示するだけのものは見つかりません。

Dim userTables As DataTable = Nothing
Dim connection As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection()
Dim source As String
source = TextDBPath.Text
connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + source
    Dim restrictions() As String = New String(3) {}
restrictions(3) = "Table"
connection.Open()
' Get list of user tables
userTables = connection.GetSchema("Tables", restrictions)
connection.Close()
' Add list of table names to listBox
Dim i As Integer
For i = 0 To userTables.Rows.Count - 1 Step i + 1
    cbox.items.add(userTables.Rows(i)(2).ToString())
Next

私が取り組んでいるプログラムでは、これは .Containers("Scripts") と DAO.Database を使用して VB6 で取得されました。どんな助けでも大歓迎です!

4

1 に答える 1

3

最初は、これはクエリを実行する簡単な問題になると思っていました

SELECT [Name] FROM MSysObjects WHERE Type = -32766

しかし、それは「MSysObjectsに対する読み取り権限がありません」で失敗します。OLEDB は、かなりきつくロックされたシステム テーブルにアクセスできるようです。CREATE VIEW listMacros AS SELECT [Name] FROM MSysObjects...a の後に aを実行してみましたSELECT * FROM listMacros。VIEW (クエリ) は正常に作成されましたが、OLEDB から [MSysObjects] の読み取りが許可されていないと表示されました。

残念。

ただし、ExcelでVBAコードをいじって、これを機能させました...

Sub listAccessMacros()
Dim objAccess As Object  '' Access.Application
Dim i As Long
Set objAccess = CreateObject("Access.Application")
objAccess.OpenCurrentDatabase "C:\Documents and Settings\Administrator\Desktop\Database1.accdb"
For i = 0 To objAccess.CurrentProject.AllMacros.Count - 1
    Debug.Print objAccess.CurrentProject.AllMacros(i).Name
Next
objAccess.CloseCurrentDatabase
objAccess.Quit
Set objAccess = Nothing
End Sub

...おそらく、VB.NET で動作するように微調整する方法を考え出すことができます。(申し訳ありませんが、私自身は VB.NET にアクセスする準備ができていません....)

于 2013-04-08T20:31:01.750 に答える