Ms access 指向访问控件,Visual Basic

Ms access 指向访问控件,Visual Basic,ms-access,vba,Ms Access,Vba,我的职能: Public Function openRpt(strReportName As String, form as ??, subform as ??) On Error Resume Next If (Forms![form]![subform].Form.lock = False) Then DoCmd.RunCommand acCmdSaveRecord End If DoCmd.OpenReport strReportName,

我的职能:

Public Function openRpt(strReportName As String, form as ??, subform as ??)
    On Error Resume Next
    If (Forms![form]![subform].Form.lock = False) Then
        DoCmd.RunCommand acCmdSaveRecord
    End If
    DoCmd.OpenReport strReportName, acViewPreview, "", _
        "[num]=Forms![form]![subform].Form.[num]"
End Function
Option Explicit
Public Function openRpt(strReportName As String, frm as String, sFrm as string)
    If (Forms(frm).Form(sFrm).Form.Dirty = True) Then
        DoCmd.RunCommand acCmdSaveRecord
    End If
    DoCmd.OpenReport strReportName, acViewPreview, "", _
        "[num]=Forms(""" & frm & """).Forms(""" & sFrm & """).Form.[num]"
End Function
它所做的是在未锁定的情况下从
子表单
保存一条记录,然后启动一个报告。我想使用匹配的变量从和子表单切换
,这些变量将指向正确的表单,并作为参数提供

  • 我应该使用什么类型的变量
  • 使用“!”有什么区别和“.”来访问属性?我明白用于访问控制器,“.”用于访问表记录,对吗
  • 对于(1):
    首先,在表单和子表单中调用变量可能很有诱惑力,但如果使用匹配名称或接近保留名称,请注意可能出现的错误。
    此外,锁不是窗体或子窗体的有效属性。如果您试图测试表单是否已更改,则应测试
    .Dirty
    以下是我编写函数代码的方式:

    Public Function openRpt(strReportName As String, form as ??, subform as ??)
        On Error Resume Next
        If (Forms![form]![subform].Form.lock = False) Then
            DoCmd.RunCommand acCmdSaveRecord
        End If
        DoCmd.OpenReport strReportName, acViewPreview, "", _
            "[num]=Forms![form]![subform].Form.[num]"
    End Function
    
    Option Explicit
    Public Function openRpt(strReportName As String, frm as String, sFrm as string)
        If (Forms(frm).Form(sFrm).Form.Dirty = True) Then
            DoCmd.RunCommand acCmdSaveRecord
        End If
        DoCmd.OpenReport strReportName, acViewPreview, "", _
            "[num]=Forms(""" & frm & """).Forms(""" & sFrm & """).Form.[num]"
    End Function
    
    第(2)款: 从

    • 点提供早期绑定,并在编译时解析,bang在运行时解析
    • 对于表单,基础查询中的控件和字段都可以通过点引用,因为它们都在表单的类型库中
    • 同样对于表单,如果在运行时更改基础查询,那么对旧查询字段的点引用将在运行时失败,因为无法在运行时更新表单的类型库
    • 因为点是早期绑定的,IntelliSense在默认情况下与点一起发生,而不是与爆炸一起发生
    • 点(因为它是早期绑定的)比bang快,但是没有人运行足够的代码来使用这些项,从而使性能差异变得真正重要