vba - uso - ¿Cómo usar rst.FindFirst con rst.NoMatch?
recordset vba excel (1)
Construya el valor de la variable, en lugar del nombre de la variable, en la cadena que le da FindFirst
para encontrar.
Suponiendo que DONOR_CONTACT_ID
es un tipo de datos de texto, también incluya citas sobre el valor de la variable ...
.FindFirst "[DONOR_CONTACT_ID] = ''" & strTemp2 & "''"
Pero si es numérico, no necesita esas citas ...
.FindFirst "[DONOR_CONTACT_ID] = " & strTemp2
Mi código funciona a excepción de esta línea
.FindFirst "[DONOR_CONTACT_ID] = strTemp2"
Quiero que mi código compruebe si hay un registro, donde existe un DONOR_CONTACT_ID específico porque hay varios registros con el mismo DONOR_CONTACT_ID. Si ese registro no existe, entonces quiero agregar ese DONOR_CONTACT_ID y RECIPIENT_CONTACT_ID a RECIPIENT_1. Si ese registro existe, deseo agregar el RECIPIENT_CONTACT_ID a RECIPIENT_2 para ese DONOR_CONTACT_ID específico. Para hacer esto, utilicé .FindFirst, para ver si había un registro, y luego usé .NoMatch. Si no hay una coincidencia, quiero agregar un nuevo registro, pero si es así, quiero verificar si tiene que ir en RECIPIENT_2.
El error que obtengo es "no reconoce ''strTemp2'' como un nombre de campo o expresión válida". Quiero ver si el registro es igual a strTemp2, pero creo que mi sintaxis es incorrecta. ¡¡Gracias por cualquier ayuda!!
Aquí está mi código:
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