在不使用实际表名的情况下以拆分形式引用活动表

时间:2012-06-21 13:30:42

标签: ms-access access-vba

我正在编写Access数据库。我有许多相同的形式。这些用于编辑主联系人表中不同字段的查找列表。

e.g。有公司领域和国家领域。为每个可编辑列表打开的表单与每个可重复的vba代码相同,因为我无法确定如何从活动表单中引用活动表。

我目前用于清除表中所有是/否框的代码是:

Private Sub cmdClearTicks_Click()

    Dim db As Database
   ' Dim sel  As Control

    Set db = CurrentDb
    ' Clear all ticks of selected records
    db.Execute "UPDATE ContactCompany " _
        & "SET Selected = null "


    ' Update Selected Field
   Me.Requery

End Sub

ContactCompany是表的名称。我希望能够在全局设置此子,但无法确定我应该替换ContactCompany以引用当前打开表单中的表。我已经尝试了Me.RecordSource这不起作用。

我非常感谢我认为这是一个非常简单的解决办法!

肖恩在下面发布了一个很好的解决方案。我现在很难过包括一个过滤器并将其定义为全球。

Sub SelectFiltered(RS As String)

Dim strFilter As String
Dim strSQl As String

If InStr(RS, "FROM") Then
    RS = Mid(RS, InStr(RS, "FROM") + 5)
    If InStr(RS, " ") Then RS = Left(RS, InStr(RS, " ") - 1)
End If

strFilter = Me.Filter

If Me.FilterOn = False Then

'Select Case MsgBox("No search or filter applied.", vbCritical + vbOKOnly, "Warning")
'End Select

strSQl = "UPDATE " & RS & " " & _
"SET Selected = 1 "

Else

strSQl = "UPDATE " & RS & " " & _
"SET Selected = 1 " & _
"WHERE " & strFilter

End If

DoCmd.SetWarnings False
DoCmd.RunSQL strSQl
DoCmd.SetWarnings True

End Sub

Me.filter在全局子中不起作用。肖恩 - 我相信你会在一秒钟内找到答案。再次感谢!

1 个答案:

答案 0 :(得分:0)

使用Me.Recordsource

即将结束

db.Execute "UPDATE " & Me.Recordsource & " SET Selected = null "
或者,如果您希望将其作为全局函数,请将Me.Recordsource传递给它

Sub ClearTicks(RS as string,StrFilter as string)

    Dim db As Database
    Set db = CurrentDb

    If InStr(RS, "FROM") Then 
        RS = Mid(RS, InStr(RS, "FROM") + 5)
        If InStr(RS, " ") Then RS = Left(RS, InStr(RS, " ") - 1)
    End If

    ' Clear all ticks of selected records
    db.Execute "UPDATE " & RS & " SET Selected = null "

    If StrFilter="" then 'no filter
    Else 'filter
    End If
End Sub

你的调用函数是:

Private Sub cmdClearTicks_Click()
    ClearTicks Me.Recordsource,Me.Filter
    Me.Refresh
End Sub

如果你想要一个可以更容易扩展的更可重用的函数方法,那么用Me.Name作为参数(例如MySub Me.Name)然后在你的可重用函数中调用sub / function:

sub MySub(FrmName as string)
Forms(FrmName).Filter
Forms(FrmName).Recordsource
Forms(FrmName).AnyOtherParamater