vba 如何将 rst.FindFirst 与 rst.NoMatch 一起使用?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17616069/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to use rst.FindFirst with rst.NoMatch?
提问by nedstark179
My code works except for this one line
除了这一行,我的代码有效
.FindFirst "[DONOR_CONTACT_ID] = strTemp2"
I want my code to check if there is a record, where a specific DONOR_CONTACT_ID exists becaue there are multiple records with the same DONOR_CONTACT_ID. If that record does not exist, then I want to add that DONOR_CONTACT_ID and RECIPIENT_CONTACT_ID to RECIPIENT_1. If that record does exist, I want to add the RECIPIENT_CONTACT_ID to RECIPIENT_2 for that specific DONOR_CONTACT_ID. To do this, I used .FindFirst, to see if there was a record, then used .NoMatch. If there isn't a match, I want to add a new record, but if there is then I want to check to see if it has to go in RECIPIENT_2.
我希望我的代码检查是否有记录,其中存在特定的 DONOR_CONTACT_ID,因为有多个记录具有相同的 DONOR_CONTACT_ID。如果该记录不存在,那么我想将该 DONOR_CONTACT_ID 和 RECIPIENT_CONTACT_ID 添加到 RECIPIENT_1。如果该记录确实存在,我想为该特定 DONOR_CONTACT_ID 添加 RECIPIENT_CONTACT_ID 到 RECIPIENT_2。为此,我使用了 .FindFirst 来查看是否有记录,然后使用了 .NoMatch。如果不匹配,我想添加一个新记录,但如果有,我想检查它是否必须进入 RECIPIENT_2。
The error I get is "does not recognize 'strTemp2' as a valid field name or expression". I want to see if the record is equal to strTemp2, but I think my syntax is wrong. Thanks for any help!!
我得到的错误是“无法将‘strTemp2’识别为有效的字段名称或表达式”。我想看看记录是否等于strTemp2,但我认为我的语法是错误的。谢谢你的帮助!!
Here is my code:
这是我的代码:
Option Compare Database
Option Explicit
Function UsingTemps()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim rstOutput As DAO.Recordset
'Defines DAO objects
Dim strTemp1 As String
Dim strTemp2 As String
Dim strVal As String
Dim strRecip As String
DoCmd.SetWarnings False
DoCmd.OpenQuery ("Q_RECIPIENT_SORT")
DoCmd.OpenQuery ("Q_DELETE_T_OUTPUT")
DoCmd.SetWarnings True
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("T_RECIPIENT_SORT", dbOpenDynaset)
'rst refers to the table T_RECIPIENT_SORT
Set rstOutput = dbs.OpenRecordset("T_OUTPUT", dbOpenDynaset)
'rstOutput refers to the table T_OUTPUT
rst.MoveFirst
'first record
strTemp1 = rst!DONOR_CONTACT_ID
'sets strTemp1 to the first record of the DONOR_CONTACT_ID
rst.MoveNext
'moves to the next record
Do While Not rst.EOF
'Loop while it's not the end of the file
strTemp2 = rst!DONOR_CONTACT_ID
'strTemp2 = DONOR_CONTACT_ID from T_RECIPIENT_SORT
If strTemp1 = strTemp2 Then
'Runs if temps have same DONOR_CONTACT ID
strRecip = rst!RECIPIENT_CONTACT_ID
'Sets strRecip = RECIPIENT_CONTACT_ID FROM T_RECIPIENT_SORT
With rstOutput
'Uses T_OUTPUT table
If .RecordCount > 0 Then
'If table has records then you can check
.FindFirst "[DONOR_CONTACT_ID] = strTemp2"
If .NoMatch Then
.AddNew
!DONOR_CONTACT_ID = strTemp1
!RECIPIENT_1 = strRecip
.Update
Else
If !DONOR_CONTACT_ID = strTemp2 Then
If IsNull(!RECIPIENT_2) And Not (IsNull(!RECIPIENT_1)) Then
.Edit
!RECIPIENT_2 = strRecip
.Update
End If
.AddNew
!DONOR_CONTACT_ID = strTemp2
!RECIPIENT_1 = strRecip
.Update
End If
End If
Else
.AddNew
!DONOR_CONTACT_ID = strTemp2
!RECIPIENT_1 = strRecip
.Update
End If
End With
End If
strTemp1 = strTemp2
rst.MoveNext
Loop
Set dbs = Nothing
End Function
回答by HansUp
Build the valueof the variable, instead of the variable name, into the string you give FindFirst
to find.
将变量的值(而不是变量名)构建到您提供的字符串中FindFirst
以进行查找。
Assuming DONOR_CONTACT_ID
is text data type, also include quotes around the variable's value ...
假设DONOR_CONTACT_ID
是文本数据类型,还包括变量值周围的引号......
.FindFirst "[DONOR_CONTACT_ID] = '" & strTemp2 & "'"
But if it's numeric, you don't need those quotes ...
但如果它是数字,你就不需要那些引号......
.FindFirst "[DONOR_CONTACT_ID] = " & strTemp2