Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.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 访问VBA-比较表中的记录_Ms Access_Vba_Ms Access 2010 - Fatal编程技术网

Ms access 访问VBA-比较表中的记录

Ms access 访问VBA-比较表中的记录,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我有两个表希望比较记录-基于字段值。以下是我尝试过的: 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

我有两个表希望比较记录-基于字段值。以下是我尝试过的:

 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作为记录集
dim varSQL作为字符串
varSQL=“从表1中选择[fieldfromtable1],其中[fieldfromtable1]='”和[fieldfromtable2]。值&'”
Set Rst=CurrentDb.OpenRecordset(varSQL)
如果rst.recordcount=1,则
MsgBox“字段具有匹配的值!”
如果结束
rst.close
您可以将
=1
替换为
>0

或者,我认为您可以使用dcount()函数,该函数类似于:

dim RCount尽可能长
Rcount=dcount(“fieldFromTable1”、“table1”、“fieldFromTable1]=”&me。[FieldFromTable2].value&“”)
如果Rcount>0,则
MsgBox“字段具有匹配的值!”
如果结束
同样,您可以使用
>0
=1
我不确定哪一个最适合您的情况

编辑

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

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

<>我还没有考虑一个选项来更新表中的记录。这就是它对我的作用。当表1中的记录满足表2中的条件时,我正试图将复选框设置为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

此代码似乎只是将表1中的第一条记录与表2中的字段进行比较。这就是你的意图吗?或者您正在尝试查看它是否存在于表1中?是的,我正在尝试查看表1中是否存在FieldFormTable2.Value。我是否也有表2的开放记录集,然后进行比较?FieldFromTable2基本上是对连续表单的控制,来自Table2记录集。谢谢@LiamH,但我得到了“条件表达式中的数据类型不匹配”错误。我的表单或表有问题,因为这两个代码都在我的示例数据库中工作。可能的原因是什么?什么是
[fieldFromTable1]
[fieldfromtable2]
,它们是字符串/数字/日期等?这两个字段都是文本数据类型我编辑了我的答案,注意我是如何用单引号(撇号)封装表单的
'string'
,你是对的,更新更容易,而且效果很好。谢谢你引导我走上正确的道路。