【问题标题】:VB open form on a specific recordVB在特定记录上打开表格
【发布时间】:2012-11-22 11:00:47
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    首先,改变:

    recordID = Me.CurrentRecord
    

    收件人:

    recordID = Me.ID
    

    其中 Me.ID 是当前表单上的字段或控件的名称 (Microsoft Access - get record id when button is clicked)。

    当你引用一个变量时,把它放在引号之外:

    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,我可以添加 where 子句吗,像这样: DoCmd.OpenForm "Form3", , , "" where ID = 'recordID'
    • 不,你需要回到你之前的问题recordID = Me.CurrentRecord应该是recordID = Me.ID
    • 是的,我将其更改为 Me.ID,但我仍然收到一个要求输入 id 的弹出框,我需要自动打开特定 id 上的表单,而不会出现询问记录 id 的提示框
    • 我让它工作了,我没有将 ID 属性字段添加到表单 3
    【解决方案2】:

    我试过我有同样的,确保你给 id 的名字是表格中使用的名字,而不是数据库中的名字! IE,我的 id 在 DB 中是 id,但在我的表单中是 pc_id

    【讨论】:

      【解决方案3】:

      这个解决方案怎么样?

      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
      

      【讨论】:

      • 请详细说明您的回答
      • 我想从我的主表单转到特定的数据记录
      【解决方案4】:

      当我想从另一个表单(称为启动表单)打开一个表单(称为目标表单)并且我希望在目标表单中查看的记录被过滤(即限制)时,这对我有用仅适用于 Launch 表单中的当前记录,并且我要用于过滤记录的字段是文本(或“字符串”)数据类型:

      Private Sub cmdOpenDestinationForm

      DoCmd.OpenForm "frmDestination",,,"[FieldName]=" & "'" & Me.ControlName & "'"

      结束子

      [FieldName] 指的是目标表单中的一个字段。 [ControlName] 指的是 Launch 表单上的控件(如文本框)。 “我”也指的是启动表单,因为这是在您单击命令按钮时打开的表单(您可以省略它)。实际上,此代码告诉 Access (1) 打开 frmDestination,(2) 搜索“FieldName”字段,直到找到与 Me.ControlName 中的值相同的记录,以及 (3) 过滤 Destination 表单以便只显示那一条记录。

      棘手的部分是所有那些双引号 ( " )、单引号 ( ' ) 和与号 (&)。 请注意,[FieldName]= 具有开始和结束双引号:“[FieldName]=”。并且不要忘记 = 符号。接下来,这后面是 &"'"。那是一个&符号,一个双引号,一个单引号和另一个双引号。根据我的经验,引号之间不能有空格。它们必须如图所示一起运行。然后是另一个&符号和 Launch 表单上的控件名称,该名称具有您要在 Destination 表单上的 [FieldName] 中找到的值:& Me.ControlName。而且,如前所述,您可以根据需要省略 Me。我使用它是因为帮助我记住 ControlName 是 Launch 表单上的控件,而不是 Destination 表单上的控件。然后是另一个 & 和另一组双引号和单引号:“'”。

      【讨论】:

      • 对不起,上面的 sub 的标题应该是:Private Sub cmdOpenDestinationForm_Click()。毕竟,它是命令按钮的 On Click 事件。
      猜你喜欢
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多