我正在使用 Microsoft 访问,我想在单击按钮时打开一个特定 ID 的表单。我可以在 Do.open form 命令中指定 id 吗?下面的代码会打开一个表单,但随后会打开一个对话框,要求输入 id 。有人有什么想法吗?
Private Sub button1_Enter()
Dim recordID As Integer
recordID = Me.CurrentRecord
DoCmd.OpenForm "Form3", , , "ID = recordID"
End sub
首先,改变:
recordID = Me.CurrentRecord
至:
recordID = Me.ID
其中 Me.ID 是当前表单上的字段或控件的名称(Microsoft Access - 单击按钮时获取记录 ID)。
当你引用一个变量时,把它放在引号之外:
DoCmd.OpenForm "Form3", , , "ID = " & recordID
这对于数字 ID 来说没问题,但是对于文本和日期来说会变得更复杂一些,因为您需要分隔符。只要sometextvar
不包含引号,这将很好地工作:
DoCmd.OpenForm "Form3", , , "Atext = '" & sometextvar & "'"
否则
DoCmd.OpenForm "Form3", , , "Atext = '" & Replace(sometextvar,"'","''") & "'"
日期需要 #
DoCmd.OpenForm "Form3", , , "ADate = #" & somedatevar & "#"
为避免语言环境问题,最好将格式设置为年、月、日,因此:
DoCmd.OpenForm "Form3", , , "ADate = #" & Format(somedatevar,"yyyy/mm/dd") & "#"
我试过我有同样的,确保你给id的名字是表格中使用的名字,而不是数据库中的名字!IE,我的 idid
在 DB 中,但pc_id
在我的表单中!
当我想从另一个表单(称为启动表单)打开表单(称为目标表单)并且我希望将目标表单中查看的记录过滤(即,限制)到仅启动表单中的当前记录和我要用于过滤记录的字段是文本(或“字符串”)数据类型:
私有子 cmdOpenDestinationForm
DoCmd.OpenForm "frmDestination",,,"[FieldName]=" & "'" & Me.ControlName & "'"
结束子
[FieldName] 指的是目标表单中的一个字段。[ControlName] 指的是 Launch 表单上的控件(如文本框)。“我”也指的是启动表单,因为这是在您单击命令按钮时打开的表单(您可以省略它)。实际上,此代码告诉 Access (1) 打开 frmDestination,(2) 搜索“FieldName”字段,直到找到与 Me.ControlName 中的值相同的记录,以及 (3) 过滤 Destination 表单以便只显示那一条记录。
棘手的部分是所有那些双引号 (")、单引号 (') 和 &符号。接下来,这后面是 &"'"。这是一个和号、一个双引号、一个单引号和另一个双引号。根据我的经验,引号符号之间不能有空格。它们必须一起运行,如图所示. 然后是另一个&符号和 Launch 表单上的控件名称,该名称具有您要在 Destination 表单的 [FieldName] 中定位的值:& Me.ControlName。并且,如前所述,您可以省略如果你愿意,我会使用它,因为它可以帮助我记住 ControlName 是 Launch 表单上的控件,而不是 Destination 表单上的控件。然后是另一个 & 和另一组双引号和单引号:“'”。
这个解决方案怎么样?
Private Sub Command10_Click()
On Error GoTo Err_Command10_Click
Dim IDnr As String
Dim stDocName As String
Dim stLinkCriteria As String
IDnr = InputBox("Enter ID")
stDocName = "FORM_MASTER"
stLinkCriteria = "[ID]=" & IDnr
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Command10_Click:
Exit Sub
Err_Command10_Click:
MsgBox Err.Description
Resume Exit_Command10_Click
End Sub