【发布时间】:2016-10-01 00:22:26
【问题描述】:
我试图弄清楚如何从不在我开始编写代码的 Access 数据库中的 Access 表单中获取表单、控件和属性数据。我已经弄清楚如何从数据库中获取数据,但我不知道如何从数据库外部的表单中获取数据。
我认为如果我将外部数据库设置为当前数据库,我的代码就可以工作。但是,在执行“For Each frm In appAccess.Forms”后,光标会转到“End Sub”。
我尝试使用容器并且能够返回表单名称,但我无法弄清楚如何循环访问控件和属性集合。
下面是与我的第一个想法相关的代码。我的最终目标是能够将表单数据保存在不同的数据库中。我的代码是否存在小错误,或者我应该使用其他方法来获取数据?
Sub GetControlForm()
Dim strPath As String
Dim frm As Form
Dim ctrl As Control
Dim prop As Property
Dim appAccess As New Access.Application
Dim dbs As DAO.Database
strPath = "C:\Users\Tyrone\Desktop\Test14.accdb"
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase (strPath)
'MsgBox appAccess.CurrentDb.Name
For Each frm In appAccess.Forms
MsgBox frm.Name
For Each ctrl In frm.Controls
MsgBox ctrl.Name
MsgBox ctrl.ControlType.TypeName
MsgBox TypeName(ctrl)
For Each prop In ctrl.Properties
If prop.Name = "RowSource" Then
MsgBox "stop it"
End If
If (TypeName(ctrl) = "ComboBox" Or TypeName(ctrl) = "TextBox") And (prop.Name = "RowSource" Or prop.Name = "ControlSource") Then
MsgBox prop.Value
End If
Next prop
Next ctrl
Next frm
End Sub
【问题讨论】:
-
你看过
CodeDB和CurrentDB,CodeProject和CurrentProject之间的区别吗?如果您的代码在 Access 加载项中,它可以枚举项目本身(codeDB)或当前数据库。 -
我没有考虑过使用 CodeDB 和 CodeProject。到目前为止,我想避免创建加载项。但是,这是进一步研究的好信息。