visual uso openrecordset ejemplo dbopendynaset currentdb vba ms-access access-vba dao

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