si el número no existe

Dudas sobre código
tivi
Nivel 2
Mensajes: 33
Registrado: Vie Ago 25, 2017 10:40 am

si el número no existe

Mensajepor tivi » Mar Sep 12, 2017 10:15 pm

en un formulario, llamo un registro desde un cuadro de texto "buscaNumero" en una tabla "tbInventario para después modificarlo, pero cuando el número llamado no existe en la tabla el formulario se queda colgado.
He intentado solucionarlo con

Código: Seleccionar todo

'If (Not IsNull(DLookup("[nInventario]", "tbInventario", "[Ninventario]='" & Me!BuscaNumero & "'"))) Then

pero no funciona
El código que tengo en el comando es :

Código: Seleccionar todo

Dim rs As DAO.Recordset

Form.RecordSource = "select * from tbInventario where nInventario=" & Me.BuscaNumero & ""
   
    Set rs = Me.Recordset.Clone
        rs.FindFirst "[nInventario] = " & Str(Nz(Me![BuscaNumero], 0))
        If Not rs.EOF Then Me.Bookmark = rs.Bookmark

        Me.PgAdquisicion.Visible = True
        Me.PgBaja.Visible = True
        Me.pgCambioGFH.Visible = True
        Me.pgCambioUbicacion.Visible = True
        Me.PgClasificacion.Visible = True
        Me.PgGFH.Visible = True
        Me.CancelaRgt.Visible = True

If Not IsNull(Me.cmbBaja) Or Not IsNull(Me.FechaBaja) Then
    Me.avisoBaja.Visible = True
    Me.avisoObservaciones.Visible = True
    Me.ObservacionesBaja.Locked = False
    Me.aptoDonacion.Locked = False
    Me.Vretirado.Locked = False
        Else
            Me.avisoBaja.Visible = False
            Me.avisoObservaciones.Visible = False
            Me.cmbBaja.Locked = False
            Me.FechaBaja.Locked = False
            Me.ObservacionesBaja.Locked = False
            Me.aptoDonacion.Locked = False
            Me.Vretirado.Locked = False
End If


If Not IsNull(FechaPuestaMarcha) And Not IsNull(Garantia) Then
            Me.finGarantia = DateAdd("m", Me.Garantia, Me.FechaPuestaMarcha)
                If CDate(Me.finGarantia) >= Date Then
                        Me.avisoVigenciaG.Visible = True
                    Else
                        Me.avisoVigenciaG.Visible = False
                End If
        Else
             Me.finGarantia = ""
End If


Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 831
Registrado: Sab Oct 24, 2015 10:12 pm

Re: si el número no existe

Mensajepor Sveinbjorn » Mié Sep 13, 2017 8:10 pm

Hola!

En mi opinión estás duplicando el trabajo sin necesidad: primero le asignas al formulario unos registros ya filtrados (con la propiedad Recordsource y el select con el where) la parte siguiente del recordsetclone deja de tener sentido, porque la primera coincidencia que te va a encontrar el FindFirst es el primer registro que ya tienes en el formulario (siempre que existan registros, claro)

Si lo que quieres es controlar que haya algún registro, puedes comprobarlo antes de cambiar el origen del formulario con:

Código: Seleccionar todo

IF DCount("*","tbInventario", "[Ninventario]=" & Me.BuscaNumero )= 0 Then
MsgBox "No hay registros"
Exit Sub  'O lo que quieras hacer
End If


o después de cambiarle el origen:

Código: Seleccionar todo

If For.RecordsetClone RecordCount=0 Then ....


En cualquier caso, las lineas

Código: Seleccionar todo

    Set rs = Me.Recordset.Clone
        rs.FindFirst "[nInventario] = " & Str(Nz(Me![BuscaNumero], 0))
        If Not rs.EOF Then Me.Bookmark = rs.Bookmark

Son redundantes e innecesarias.

A mi, particularmente, no me gusta la opción de andar cambiando el origen al formulario, ni usar los bookmarks. Prefiero trabajar con filtros: si hay coincidencia ya ves el regsitro, y si no ves el formulario en blanco.
Sveinbjorn El Rojo

tivi
Nivel 2
Mensajes: 33
Registrado: Vie Ago 25, 2017 10:40 am

Re: si el número no existe

Mensajepor tivi » Mié Sep 13, 2017 9:21 pm

Muchas gracias Sveinbjorn El Rojo. Funciona genial y ya no se cuelga!!!

Lo único, es que me gustaría poder controlar que cuando el usuario teclee una letra (el campo es numérico) saliera un mensaje advirtiéndoselo. En teoría es el error 13 pero ahora gracias a tu código, no entra en el error.
¿Habría alguna forma sencilla o dejo de rizar el rizo?

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 831
Registrado: Sab Oct 24, 2015 10:12 pm

Re: si el número no existe

Mensajepor Sveinbjorn » Mié Sep 13, 2017 10:07 pm

Mírate la función IsNumeric()

;)
Sveinbjorn El Rojo

tivi
Nivel 2
Mensajes: 33
Registrado: Vie Ago 25, 2017 10:40 am

Re: si el número no existe

Mensajepor tivi » Vie Sep 15, 2017 9:25 pm

Hecho.
Funciona!


Volver a “Código VBA”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado