这可能是一个愚蠢的问题,但我仍然是Access VBA的新手。我有一个表格上有很多字段。我刚刚创建了一个从另一个表中提取数据的子表单,但我需要它以主表单中的数据为基础。
因此主窗体有项目编号,项目类型,和 GroupID ,我想使用该组合将Permit从辅助表拉入子窗体。< / p>
主表名为 PMDBII ,辅助表名为 Project_Permit 。
表单目前看起来像这样:
因此,选中的项目会显示与其关联的 Permit 突出显示。
我想要做的是让左侧的列表成为与项目关联的不的所有许可证的列表右边的列表是与项目相关联的所有许可 。
所以它看起来像这样:
+----------------+--------+
| Federal | Tribal |
| Power Easement | |
| Railroad | |
| State | |
| Township | |
+----------------+--------+
然后我可以在左边选择另一个许可,然后点击&gt;按钮将其移动到右侧。
问题是我不知道如何将正确的数据输入到 Project_Permit 表中。我知道我需要输入项目编号,项目类型,GroupID 和 Permit 。我可以获得 Permit ,这是我遇到麻烦的其余部分。
这是我到目前为止所得到的:
Private Sub cmd_Select_Click()
Dim SQL As String
Dim ProjectNum As String
Dim PermitNum As String
Dim GROUPID As String
Dim ProjectType As String
With Me.PERMIT
PermitNum = .Value
End With
SQL = "INSERT INTO pmdb.Project_Permit(Project,Permit,ProjectType,GroupID)" _
& " Select '" & ProjectNum & "', " & PermitNum & ", " & ProjectType & ", '" & GROUPID & "';"
CurrentDb.Execute SQL
Forms![DATASHEET - CAF2].Form!PERMIT.Requery
Forms![DATASHEET - CAF2].Form!Selected.Requery
End Sub
这是主要表格。我不知道如何使用它来获取插入新记录所需的其他数据。
答案 0 :(得分:2)
只需引用从子窗体调用的追加查询中的主forms controls即可。下面还显示了parameterize the query如何将querydef用作VBA字符串或保存的Access查询方法。当然,调整表单和/或控件名称和参数数据类型。
VBA字符串查询方法
...
Dim qdef as QueryDef
' PREPARE STATEMENT (DEFINES PARAMS AND ADDS THEM AS PLACEHOLDERS)
SQL = "PARAMETERS [ProjectNumParam] TEXT(255), [PermitNumParam] LONG," _
& " [ProjectType] TEXT(255), [GROUPIDParam] LONG;" _
& " INSERT INTO Project_Permit(Project, Permit," _
& " ProjectType, GroupID)" _
& " VALUES ([ProjectNumParam], [PermitNumParam], " _
& " [ProjectTypeParam], [GROUPIDParam]);"
' INITIALIZE QUERY OBJECT
Set qdef = CurrentDb.CreateQueryDef("", SQL)
' BIND VALUES TO PARAMS
qdef![ProjectNumParam] = Forms!mymainform!ProjectNum
qdef![PermitNumParam] = Forms!mysubform!PermitNum
qdef![ProjectTypeParam] = Forms!mymainform!ProjectType
qdef![GROUPIDParam] = Forms!mymainform!GROUPID
' EXECUTE ACTION
qdef.Execute dbfailOnError
Set qdef = NOthing
保存的查询方法
SQL (另存为Access存储查询,PARAMETERS
在Access SQL方言中有效)
PARAMETERS [ProjectNumParam] TEXT(255), [PermitNumParam] LONG,
[ProjectType] TEXT(255), [GROUPIDParam] LONG;
INSERT INTO Project_Permit(Project, Permit, ProjectType, GroupID)
VALUES ([ProjectNumParam], [PermitNumParam], [ProjectTypeParam], [GROUPIDParam])
VBA (按名称引用上述查询)
' INITIALIZE QUERY OBJECT
Set qdef = CurrentDb.QueryDefs("mySavedQuery")
' BIND VALUES TO PARAMS
qdef![ProjectNumParam] = Forms!mymainform!ProjectNum
qdef![PermitNumParam] = Forms!mysubform!PermitNum
qdef![ProjectTypeParam] = Forms!mymainform!ProjectType
qdef![GROUPIDParam] = Forms!mymainform!GROUPID
' EXECUTE ACTION
qdef.Execute dbfailOnError
Set qdef = Nothing