试试这个
Public Sub FindInAllTables(ByVal s As String)
Dim db As DAO.Database, rs As DAO.Recordset
Dim tdf As DAO.TableDef, fld As DAO.Field
Dim pattern As String
pattern = "*" & s & "*"
Set db = CurrentDb
For Each tdf In db.TableDefs
If (tdf.Attributes And dbSystemObject) = 0 Then
On Error Resume Next
Set rs = tdf.OpenRecordset(dbOpenSnapshot)
If err.Number = 0 Then
On Error GoTo 0
Debug.Print "Scanning [" & tdf.Name & "] ";
Do Until rs.EOF()
For Each fld In rs.Fields
If fld.Value Like pattern Then
Debug.Print
Debug.Print " Match in [" & tdf.Name & "].[" & _
fld.Name & "] ===> """ & fld.Value & """";
Exit Do
End If
Next fld
If rs.AbsolutePosition Mod 1000 = 999 Then
Debug.Print ".";
End If
rs.MoveNext
Loop
Debug.Print
rs.Close
Else
On Error GoTo 0
Debug.Print "Cannot open table [" & tdf.Name & "]"
End If
End If
Next tdf
db.Close
End Sub
此发现包含在一个字段的任何部分字符串。如果您只想查找整个字段,请用If fld.Value = s Then
替换If fld.Value Like pattern Then
。
当我试图在即时窗口中执行它时,它会显示“运行时错误3167”:记录被删除。“ – Antrim
奇怪。这不会发生在我的数据库中。有人在同一时间在同一个数据库上工作吗?尝试添加一些错误处理('On Error Resume Next'或类似的)。 –
我试了两种方法,并且都抛出“运行时错误'3167':记录被删除。”任何想法有什么不对? – Antrim