¡Buenos días a todos! Estoy atascado y agradecería cualquier ayuda que pueda obtener.

Parte de mi subrutina obtiene un valor de un conjunto de registros. Si la consulta en la que se basa el conjunto de registros no devuelve un valor, aparece el error:

'3021' Sin registro actual

Estoy tratando de verificar si hay registros nulos y redirigir mi código vba a otro lugar para evitar este error, pero no puedo hacerlo. Todas las referencias que he visto hasta ahora han dicho que hagan lo mismo, que es lo que intenté

IsNull (rst.FIelds ("campo"). Valor)

Y todavía no funciona. No estoy seguro de dónde hacer desde aquí.

El código está abajo.

Por el momento, para fines de depuración, he codificado los valores 27 y Esquemático , pero tenga en cuenta que en la subrutina real, estas serán variables.

¡Toda su ayuda es muy apreciada! Qué tengas un lindo día :)

Dim dbs As DAO.Database
Dim rst_Trim As DAO.Recordset    
Set dbs = CurrentDb
    
    qrystring = "SELECT tblDocuments.Trim FROM tblDocuments WHERE (tblDocuments.ID = 27 AND tblDocuments.type = 'Schematic')"
    Set rst_Trim = dbs.OpenRecordset(qrystring, dbOpenSnapshot)
    
    If IsNull(rst_Trim.Fields("trim").Value) Then
        'do stuff
        MsgBox "null"
    Else
        trimNumber = rst_Trim.Fields("trim").Value
        'do stuff
        MsgBox trimNumber
    End If
0
pewpew 12 feb. 2021 a las 04:41

2 respuestas

La mejor respuesta

No le gusta el uso de la propiedad .Value cuando el juego de registros está vacío. El valor es una propiedad predeterminada y no es necesario hacer referencia. Simplemente elimínelo de su código y debería funcionar.

De lo contrario, otra forma de probar si el conjunto de registros tiene registros:

If rs.EOF Then
    MsgBox "No records"
Else
    'do something
End If
1
June7 12 feb. 2021 a las 02:24

Como espera solo uno o "un" valor, DLookup puede hacerlo:

Dim TrimValue   As Variant

TrimValue = DLookup("[Trim]", "[tblDocuments]", "[ID] = 27 And [Type] = 'Schematic'")

If IsNull(TrimValue) Then
    ' Do stuff.
    MsgBox "null"
Else
    trimNumber = TrimValue
    ' Do stuff.
    MsgBox trimNumber
End If
2
Gustav 12 feb. 2021 a las 08:19