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快,但是没有人运行足够的代码来使用这些项,从而使性能差异变得真正重要