【问题标题】:Access VBA - compare records from tables访问 VBA - 比较表中的记录
【发布时间】:2016-03-24 07:26:40
【问题描述】:

我有两个表,我希望根据字段值比较记录。这是我尝试过的:

 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 表单中当前选择的记录。

【问题讨论】:

  • 此代码似乎只是将table1 中的第一条记录与FieldFromTable2 进行比较。这就是你的意图吗?还是您想查看fieldfromTable2 是否存在于table1 中?
  • 是的,我正在尝试查看 Table1 中是否存在 FieldFormTable2.Value。我是否也为 Table2 打开了记录集,然后进行比较? FieldFromTable2 基本上是对来自 Table2 记录集的连续形式的控制。

标签: ms-access vba ms-access-2010


【解决方案1】:

从我的评论开始。您可以使用记录计数来查看是否有记录存在并匹配。您可以使用以下查询来查看记录是否存在:

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 我不确定哪个最适合您的情况。

编辑

可以执行以下查询来更新复选框,但这不是表单级别的

UPDATE table1 INNER JOIN table2 ON table1.[fieldfromtable1] = table2.[fieldfromtable2] SET table1.[checkboxField] = True
WHERE table2.[fieldfromtable2]= table1.[fieldFromtable1]

【讨论】:

  • 感谢@LiamH,但我收到“标准表达式中的数据类型不匹配”错误。我的表格或表格有问题,因为您的两个代码都在我的示例数据库中工作。可能是什么原因?
  • 什么是[fieldFromTable1] 和[fieldfromtable2],它们是字符串/数字/日期等吗?
  • 两个字段都是文本数据类型
  • 我已经编辑了我的答案,请注意我是如何用单引号(撇号)封装表单 'string'
  • 你是对的,更新更容易,而且效果很好。感谢您引导我走上正确的道路。
【解决方案2】:

我还没有真正考虑过只更新表中的记录的选项。这就是它对我有用的东西。当 Table1 中的记录满足 Table2 中的条件时,我只是试图将 Checkbox 设置为 TRUE。一个简单的 UPDATE 解决了这个问题:

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

【讨论】:

    猜你喜欢
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2016-12-08
    • 1970-01-01
    相关资源
    最近更新 更多