Una duda, en access cuando hace un select * algo y

Una duda, en access cuando hace un select * algo y se captura un valor que no se encuentra en la tabla, ¿cómo se llama eso? P como lo capturo para que no me muestre un formulario vacío y en vez de eso mandar un msgbox que indique que el registro no fue encontrado.
Mire tengo este código
Private Sub Buscar_Click()
    If Forms("Buscar por nómina").Controls.Item("txtNomina") <> "" Or IsNumeric(Forms("Buscar por nómina").Controls.Item("txtNomina")) Then
        DoCmd.OpenForm ("frmPersonal")
        Forms("frmPersonal").RecordSource = "SELECT * FROM tblpersonal WHERE nomina =" & Forms("Buscar por nómina").Controls.Item("txtNomina")
        Me.DataEntry = False
        Me.AllowAdditions = False
        Me.AllowEdits = False
        Forms("Buscar por nómina").Controls.Item("txtNomina") = Clear
    Else
        MsgBox "Captura un número de nómina valido", vbCritical, "Error en la nómina"
    End If
End Sub
Hasta aquí lo que hace es abrir el formulario con el registro de la nomina que le he enviado en la caja de texto, sin embargo cuando en la caja de texto capturo un numero de nómina que no existe me envía al formulario solo que en blanco, sin controles visibles.

1 respuesta

Respuesta
1
Prueba con este código:
Option Compare Database
Option Explicit
Private Sub Buscar_Click()
    Dim rs As Recordset
    Dim snDatos As Boolean
    Dim txtSql As String
    Dim numNomina As Variant
    ' Recuperamos el número de nómina del formulario
    numNomina = Forms("Buscar por nómina").Controls.Item("txtNomina")
    If numNomina = "" Or Not IsNumeric(numNomina) Then
        MsgBox "Captura un número de nómina valido", vbCritical, "Error en la nómina"
        Exit Sub
    End If
    ' Comprobamos que el número exista en la tabla de datos
    txtSql = "select * from tblpersonal where nomina=" & numNomina
    Set rs = CurrentDb().OpenRecordset(txtSql)
    snDatos = Not rs.EOF
    rs.Close
    If snDatos Then ' Tiene datos. Los presentamos
        txtSql = "nomina =" & numNomina
        DoCmd.OpenForm "frmPersonal", acNormal, , txtSql, acFormReadOnly, acDialog
      Else
        MsgBox "Número de nómina no encontrado. Búsqueda cancelada."
    End If
    Forms("Buscar por nómina").SetFocus
End Sub
Si lo que quieres que te salga cuando no hay registros es un formulario vacío, podrías cambiar el último 'msgbox' por la apertura de un formulario con un cartel de 'Nómina no existe'.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas