Как обновить набор записей с помощью DAO - PullRequest
0 голосов
/ 09 июля 2020

Я хочу обновить rs2 на основе условия 2.

Условие 1: rs1![UserName] = rs2![UserName]

Условие 2: rs1![UserName] <> rs2![UserName] т.е. если значения полей не совпадают

У меня есть код ниже, который возвращает £0.00 для всего поля Payment в rs2 и неправильное значение для последней записи.

Dim rs1 As DAO.Recordset
Dim rs 2 As DAO.Recordset

Set rs1 = CurrentDb.OpenRecordset("SELECT * FROM tblUsers")
Set rs2 = CurrentDb.OpenRecordset("SELECT * FROM tblFunding")

 rs1.MoveFirst
 Do Until rs1.EOF
   rs2.MoveFirst
   Do Until rs2.EOF
   rs2.Edit
   If rs1![UserName] = rs2![UserName] Then
   rs2.Fields("Payment").Value = rs1.Fields("Payment").Value
   rs2.Update
   ElseIf rs1![UserName] <> rs2![UserName] Then
   rs2.Fields("Payment").Value = 0
   rs2.Update
     
   End If     
   rs2.MoveNext
   Loop
 rs1.MoveNext
 Loop

rs1.Close
rs2.Close
Set rs1 = Nothing
Set rs2 = Nothing

1 Ответ

2 голосов
/ 09 июля 2020

Я предполагаю, что ElseIf rs1![UserName] <> rs2![UseName] - это опечатка во втором имени поля.

Это вызвано тем, как вы вложили свои циклы.

Что вы делаете для каждой записи в первом наборе записей, проходя через весь второй набор записей, делая правки на каждом шаге l oop на основе соответствия двух полей. Следовательно, последнее редактирование для каждой записи в первом наборе записей происходит при сравнении с последней записью во втором наборе записей.

Почти наверняка есть лучший способ сделать то, что вы пытаетесь здесь достичь, но недостаточно информации, чтобы оказать дополнительную помощь.

EDIT

Вместо того, чтобы зацикливать наборы записей, будет быстрее выполнить два оператора SQL:

    Currentdb.Execute "UPDATE tblFunding SET Payment=0;"
    Currentdb.Execute "UPDATE tblFunding AS F INNER JOIN tblUsers AS U ON F.UserName=U.UserName SET F.Payment=U.Payment;"

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...