2016-03-24 3 views
0

У меня есть две таблицы, которые я хочу сравнить с записями - на основе значений полей. Вот что я пробовал:Доступ к VBA - сравнение записей из таблиц

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 

Вот мой обновленный вопрос, что-то вроде того, что я пытаюсь выполнить. Но этот код повторяется только в текущей выбранной записи в моей таблице2.

+0

Этот код, по-видимому, сравнивает первую запись в 'table1' с' FieldFromTable2'. Это ваше намерение? или вы пытаетесь понять, существует ли 'fieldfromTable2' в' table1'? – LiamH

+0

Да, я пытаюсь увидеть If FieldFormTable2.Value существует в таблице1. У меня есть открытый набор записей для Table2, а затем сравните? FieldFromTable2 в основном контролирует непрерывную форму, из набора записей Table2. – LuckyLuke82

ответ

0

Я не считаю вариант, чтобы просто UPDATE записи в таблицах. Thsi - это то, что Он работал для меня. Я просто пытался установить флажок в TRUE, когда запись из таблицы 1 соответствует критериям в таблице2. Простой 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 
0

Следующее из моего комментария. Вы можете использовать записи, чтобы увидеть, существует ли запись и соответствует ли она. Вы можете использовать следующий запрос, чтобы увидеть, если запись существует:

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] 
+0

Спасибо @LiamH, но я получаю ошибку «несоответствие типа данных в критерии expresion». Что-то не так с моими формами или таблицами, потому что оба ваших кода работают в моей примерной БД. Что может быть причиной ? – LuckyLuke82

+0

Что такое '[fieldFromTable1]' и '[fieldfromtable2]', это строки/числа/даты и т. Д.? – LiamH

+0

Оба поля являются текстовыми данными типа – LuckyLuke82