Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 如何创建一个表单,在access中搜索数据库的所有表中的值_Ms Access_Vba - Fatal编程技术网

Ms access 如何创建一个表单,在access中搜索数据库的所有表中的值

Ms access 如何创建一个表单,在access中搜索数据库的所有表中的值,ms-access,vba,Ms Access,Vba,我试图创建一个表单,在数据库中的所有表中搜索值(有多个表)。结果将显示为其中显示的表的名称。如果有人能帮我,那就太好了 简而言之,我有一个带有文本框和按钮的表单。我输入搜索字符串(例如183939)并单击按钮。它在数据库中的表中的所有字段中搜索值(183939),如果找到该值,则显示该值所在的表的名称。谢谢您的帮助。我认为这是一个坏主意,因为它可能需要很长时间,并且由于还搜索系统表而提供混乱的结果。。。但是下面的函数将返回一个包含搜索项的所有表名的数组,如果没有找到,则不返回任何内容。调用示例是

我试图创建一个表单,在数据库中的所有表中搜索值(有多个表)。结果将显示为其中显示的表的名称。如果有人能帮我,那就太好了


简而言之,我有一个带有文本框和按钮的表单。我输入搜索字符串(例如183939)并单击按钮。它在数据库中的表中的所有字段中搜索值(183939),如果找到该值,则显示该值所在的表的名称。谢谢您的帮助。

我认为这是一个坏主意,因为它可能需要很长时间,并且由于还搜索系统表而提供混乱的结果。。。但是下面的函数将返回一个包含搜索项的所有表名的数组,如果没有找到,则不返回任何内容。调用示例是这样的:
theTables=containingTable(“hello”)
,其中theTables是一个变体。限制是,对于多值字段,这将失败

Function containingTables(term As String)
    Dim db As Database
    Dim tds As TableDefs
    Dim td As TableDef
    Set db = CurrentDb
    Set tds = db.TableDefs
    For Each td In tds
        For Each f In td.Fields
            On Error Resume Next
            If DCount("[" & f.Name & "]", "[" & td.Name & "]", "[" & f.Name & "] LIKE '*" & term & "*'") Then
                If Err.Number <> 0 Then
                    Debug.Print Err.Number, Err.Description
                    Err.Clear
                    On Error GoTo 0
                Else
                    containingTables = containingTables & td.Name & ","
                    Exit For
                End If
            End If
        Next
    Next
    Set tds = Nothing
    Set db = Nothing
    'Alternate Version
    if Len(containgingTables) then containingTables = Left(containingTables, Len(containingTables) - 1)
    'Original Version
    'if Len(containgingTables) then containingTables = Split(Left(containingTables, Len(containingTables) - 1), ",")
End Function
函数包含表(术语为字符串)
dimdb作为数据库
将tds变暗为TableDefs
将td设置为TableDef
Set db=CurrentDb
设置tds=db.TableDefs
对于tds中的每个td
对于td.字段中的每个f
出错时继续下一步
如果数据计数(“[”&f.Name&“]”、“[”&td.Name&“]”、“[”&f.Name&“]与“*”)类似,则
如果错误号为0,则
调试.打印错误号,错误说明
呃,明白了
错误转到0
其他的
containingTables=containingTables&td.Name&“
退出
如果结束
如果结束
下一个
下一个
设置tds=无
Set db=Nothing
“替代版本
如果Len(containingTables),那么containingTables=Left(containingTables,Len(containingTables)-1)
"原版",
'如果Len(containingTables),那么containingTables=Split(左(containingTables,Len(containingTables)-1),“,”)
端函数

要使用备用版本显示结果,只需使用:
Msgbox(containingTables(searchTerm))
where
searchTerm
就是您要搜索的内容。

我认为这是一个坏主意,因为它可能需要很长时间,并且由于还搜索系统表,因此会提供混乱的结果。。。但是下面的函数将返回一个包含搜索项的所有表名的数组,如果没有找到,则不返回任何内容。调用示例是这样的:
theTables=containingTable(“hello”)
,其中theTables是一个变体。限制是,对于多值字段,这将失败

Function containingTables(term As String)
    Dim db As Database
    Dim tds As TableDefs
    Dim td As TableDef
    Set db = CurrentDb
    Set tds = db.TableDefs
    For Each td In tds
        For Each f In td.Fields
            On Error Resume Next
            If DCount("[" & f.Name & "]", "[" & td.Name & "]", "[" & f.Name & "] LIKE '*" & term & "*'") Then
                If Err.Number <> 0 Then
                    Debug.Print Err.Number, Err.Description
                    Err.Clear
                    On Error GoTo 0
                Else
                    containingTables = containingTables & td.Name & ","
                    Exit For
                End If
            End If
        Next
    Next
    Set tds = Nothing
    Set db = Nothing
    'Alternate Version
    if Len(containgingTables) then containingTables = Left(containingTables, Len(containingTables) - 1)
    'Original Version
    'if Len(containgingTables) then containingTables = Split(Left(containingTables, Len(containingTables) - 1), ",")
End Function
函数包含表(术语为字符串)
dimdb作为数据库
将tds变暗为TableDefs
将td设置为TableDef
Set db=CurrentDb
设置tds=db.TableDefs
对于tds中的每个td
对于td.字段中的每个f
出错时继续下一步
如果数据计数(“[”&f.Name&“]”、“[”&td.Name&“]”、“[”&f.Name&“]与“*”)类似,则
如果错误号为0,则
调试.打印错误号,错误说明
呃,明白了
错误转到0
其他的
containingTables=containingTables&td.Name&“
退出
如果结束
如果结束
下一个
下一个
设置tds=无
Set db=Nothing
“替代版本
如果Len(containingTables),那么containingTables=Left(containingTables,Len(containingTables)-1)
"原版",
'如果Len(containingTables),那么containingTables=Split(左(containingTables,Len(containingTables)-1),“,”)
端函数

要使用备用版本显示结果,只需使用:
Msgbox(containingTables(searchTerm))
其中
searchTerm
就是您要搜索的内容。

Me我也不知道您为什么要这样做

我认为Daniel Cook发布的解决方案是正确的,我只是采取了稍微不同的方法。你需要像我一样匹配精确的值吗?无论如何,我的代码如下:

Function searchTables(term as String)
  Dim T As TableDef
  Dim Rs As Recordset
  Dim Result() As String
  Dim Counter

  Counter = 0
  For Each T In CurrentDb.TableDefs
    If (Left(T.Name, 4) <> "USys") And (T.Attributes = 0) Then

      Set Rs = T.OpenRecordset
      While Not Rs.EOF
        For Each Field In Rs.Fields
          If Rs(Field.Name) = term Then
            Counter = Counter + 1
            ReDim Preserve Result(Counter)
            Result(Counter) = T.Name & "," & Field.Name
          End If
        Next
        Rs.MoveNext
      Wend
      Rs.Close

    End If
  Next
  If Counter = 0 Then
    searchTables = Null
  Else
    searchTables = Result
  End If
End Function
函数搜索表(术语为字符串)
将T调暗为TableDef
将遥感器作为记录集
Dim Result()作为字符串
暗色计数器
计数器=0
对于CurrentDb.TableDefs中的每个T
如果(左(T.Name,4)“USys”)和(T.Attributes=0),则
Set Rs=T.OpenRecordset
而不是卢比
对于Rs.字段中的每个字段
如果Rs(Field.Name)=术语,则
计数器=计数器+1
重拨保留结果(计数器)
结果(计数器)=T.Name&“,”和Field.Name
如果结束
下一个
下一个
温德
Rs.Close
如果结束
下一个
如果计数器=0,则
searchTables=Null
其他的
searchTables=结果
如果结束
端函数

你应该过滤掉重复的值,以防函数多次匹配同一个表中的同一个字段。

我也是。我不知道你为什么要这样做

我认为Daniel Cook发布的解决方案是正确的,我只是采取了稍微不同的方法。你需要像我一样匹配精确的值吗?无论如何,我的代码如下:

Function searchTables(term as String)
  Dim T As TableDef
  Dim Rs As Recordset
  Dim Result() As String
  Dim Counter

  Counter = 0
  For Each T In CurrentDb.TableDefs
    If (Left(T.Name, 4) <> "USys") And (T.Attributes = 0) Then

      Set Rs = T.OpenRecordset
      While Not Rs.EOF
        For Each Field In Rs.Fields
          If Rs(Field.Name) = term Then
            Counter = Counter + 1
            ReDim Preserve Result(Counter)
            Result(Counter) = T.Name & "," & Field.Name
          End If
        Next
        Rs.MoveNext
      Wend
      Rs.Close

    End If
  Next
  If Counter = 0 Then
    searchTables = Null
  Else
    searchTables = Result
  End If
End Function
函数搜索表(术语为字符串)
将T调暗为TableDef
将遥感器作为记录集
Dim Result()作为字符串
暗色计数器
计数器=0
对于CurrentDb.TableDefs中的每个T
如果(左(T.Name,4)“USys”)和(T.Attributes=0),则
Set Rs=T.OpenRecordset
而不是卢比
对于Rs.字段中的每个字段
如果Rs(Field.Name)=术语,则
计数器=计数器+1
重拨保留结果(计数器)
结果(计数器)=T.Name&“,”和Field.Name
如果结束
下一个
下一个
温德
Rs.Close
如果结束
下一个
如果计数器=0,则
searchTables=Null
其他的
searchTables=Re