これは、フィールドの任意の部分に含まれる文字列を見つけ、この
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 Like pattern Then
をIf fld.Value = s Then
に置き換えてください。
私は、直前のウィンドウでそれを実行しようとすると、 "実行時エラー '3167':レコードが削除されます。 – Antrim
奇妙な。それは私のDBで発生しません。他の誰かが同じDBで同時に作業していますか?エラー処理を追加してみてください( 'On Error Resume Next'など)。 –
私は2つの方法を試して、両方の "実行時エラー '3167'をスロー:レコードが削除されます。どのようなアイデアが間違っている? – Antrim