Access VBA - 比较表中的记录
Access VBA - compare records from tables
我有两个表,我希望根据字段值比较记录。这是我尝试过的:
Dim RCount As Long
Dim Rst As Recordset
Dim Rst1 As Recordset
Dim f As Field
'Current Record set
Set Rst = CurrentDb.OpenRecordset("Table1")
Set Rst1 = CurrentDb.OpenRecordset("Table2")
With Rst
For Each f In Rst1.Fields
RCount = DCount("FieldFromTable1", "Table1", "[FieldFromTable1]='" & Me.[FieldFromTable2].Value & "'")
If RCount > 0 Then
Me.Checkbox1.Value = True
End If
Next f
End With
Rst.Close
Rst1.Close
这是我更新的问题,我正在尝试完成类似的问题。但是这段代码仍然只在我的 Table2 表单中当前选择的记录中循环。
根据我的评论。您可以使用 recordcounts 查看是否存在匹配的记录。您可以使用以下查询来查看记录是否存在:
dim rst as recordset
dim varSQL as string
varSQL = "SELECT [fieldfromtable1] FROM Table1 WHERE [fieldfromtable1] ='" & [fieldfromtable2].value & "'"
Set Rst = CurrentDb.OpenRecordset(varSQL)
If rst.recordcount = 1 then
MsgBox "Fields have matching values !"
End If
rst.close
您可以将 =1
替换为 >0
。
或者,我认为您可以使用 dcount() 函数,它类似于:
dim RCount as long
Rcount = dcount("fieldFromTable1","table1", "[fieldFromTable1]='" & me.[FieldFromTable2].value & "'")
if Rcount > 0 then
MsgBox "Fields have matching values !"
end if
同样,您可以使用 >0
或 =1
我不确定哪个最适合您的情况。
Edit
可以执行以下查询来更新复选框,但这不是在表单级别
UPDATE table1 INNER JOIN table2 ON table1.[fieldfromtable1] = table2.[fieldfromtable2] SET table1.[checkboxField] = True
WHERE table2.[fieldfromtable2]= table1.[fieldFromtable1]
我还没有真正考虑过只更新表中记录的选项。这就是它对我有用的东西。当 Table1 中的记录满足 Table2 中的条件时,我只是试图将 Checkbox 设置为 TRUE。一个简单的更新解决了这个问题:
Dim SQL As String
niz = " UPDATE Table2" & _
" INNER JOIN Table1" & _
" ON Table1.FieldFromTable1=Table2.FieldFromTable2" & _
" SET Table2.Checkbox1=True"
DoCmd.SetWarnings False
DoCmd.RunSQL niz
DoCmd.Requery
DoCmd.SetWarnings True
我有两个表,我希望根据字段值比较记录。这是我尝试过的:
Dim RCount As Long
Dim Rst As Recordset
Dim Rst1 As Recordset
Dim f As Field
'Current Record set
Set Rst = CurrentDb.OpenRecordset("Table1")
Set Rst1 = CurrentDb.OpenRecordset("Table2")
With Rst
For Each f In Rst1.Fields
RCount = DCount("FieldFromTable1", "Table1", "[FieldFromTable1]='" & Me.[FieldFromTable2].Value & "'")
If RCount > 0 Then
Me.Checkbox1.Value = True
End If
Next f
End With
Rst.Close
Rst1.Close
这是我更新的问题,我正在尝试完成类似的问题。但是这段代码仍然只在我的 Table2 表单中当前选择的记录中循环。
根据我的评论。您可以使用 recordcounts 查看是否存在匹配的记录。您可以使用以下查询来查看记录是否存在:
dim rst as recordset
dim varSQL as string
varSQL = "SELECT [fieldfromtable1] FROM Table1 WHERE [fieldfromtable1] ='" & [fieldfromtable2].value & "'"
Set Rst = CurrentDb.OpenRecordset(varSQL)
If rst.recordcount = 1 then
MsgBox "Fields have matching values !"
End If
rst.close
您可以将 =1
替换为 >0
。
或者,我认为您可以使用 dcount() 函数,它类似于:
dim RCount as long
Rcount = dcount("fieldFromTable1","table1", "[fieldFromTable1]='" & me.[FieldFromTable2].value & "'")
if Rcount > 0 then
MsgBox "Fields have matching values !"
end if
同样,您可以使用 >0
或 =1
我不确定哪个最适合您的情况。
Edit
可以执行以下查询来更新复选框,但这不是在表单级别
UPDATE table1 INNER JOIN table2 ON table1.[fieldfromtable1] = table2.[fieldfromtable2] SET table1.[checkboxField] = True
WHERE table2.[fieldfromtable2]= table1.[fieldFromtable1]
我还没有真正考虑过只更新表中记录的选项。这就是它对我有用的东西。当 Table1 中的记录满足 Table2 中的条件时,我只是试图将 Checkbox 设置为 TRUE。一个简单的更新解决了这个问题:
Dim SQL As String
niz = " UPDATE Table2" & _
" INNER JOIN Table1" & _
" ON Table1.FieldFromTable1=Table2.FieldFromTable2" & _
" SET Table2.Checkbox1=True"
DoCmd.SetWarnings False
DoCmd.RunSQL niz
DoCmd.Requery
DoCmd.SetWarnings True