Buscar registro access

Tengo una tabla con 100 campos y la lleno con un form al que le hice un botón guardar
implementando un INSERT y para ello le quite a todos los controles la propiedad
"Origen del Control" y funciona perfecto. Ahora tengo que hacer un botón buscar (por
numero de registro)para poder actualizar los registros cuando sea necesario.
Implemente este código que encontré acá:
Dim buscando As String, Criterio As String
buscando = InputBox("¿Que registro quieres buscar?")
If buscando = "" Then Exit Sub
Criterio = "NoFormulario"
'Buscar desde el siguiente registro a la posoción actual
Dim Adodc1 As Object
Set Adodc1 = Me.Recordset.Clone
'Dim Adodc1 As New ADODB.Recordset
Adodc1.Recordset.MoveNext
If Not Adodc1.Recordset.EOF Then
Adodc1.Recordset.Find Criterio
End If
If Adodc1.Recordset.EOF Then
Adodc1.Recordset.MoveFirst
' Buscar desde el principio
Adodc1.Recordset.Find Criterio
If Adodc1.Recordset.EOF Then
Adodc1.Recordset.MoveLast
MsgBox ("No encuentro ese nombre")
End If
End If
Pero me genera el error 91 que dice: Variable de objeto o bloque Whit no establecido.
Lo mismo con muchos otros código que encontré en la red, creo que la falla esta en
que ellos usan la propiedad "Origen del Control" o no se si es que hay que hacerle
algo más al formulario en alguna propiedad al cargar.
Por favor ayúdenme es algo urgente en mi trabajo.

1 respuesta

Respuesta
2
Personalmente no me gusta el código que planteas porque, para mi gusto, resulta bastante confuso. Te propongo que en ese botón de comando que mencionas le añadas al evento "Al hacer click" el código que te pongo más abajo.
El código parte de la base que el valor a buscar es numérico, por lo que comentas en tu consulta.
Te he marcado en negrita las palabras que debes cambiar por el nombre de tus campos. De todas maneras, al final del código, te escribo las equivalencias.
El código es:
---
Private Sub Comando4_Click()
Dim MyRst As Object
Dim vBusca As Variant
Dim blnEncontrado As Boolean
vBusca = InputBox("¿Número de registro a buscar?", "BÚSQUEDA", "...")
If vBusca = "" Then Exit Sub
blnEncontrado = False
Set MyRst = Me.Recordset.Clone
MyRst.MoveFirst
Do Until MyRst.EOF
    Dim vRegistro As Integer
    vRegistro = MyRst.Fields("Id").Value
    If vRegistro = vBusca Then
        blnEncontrado = True
        Exit Do
    End If
    MyRst.MoveNext
Loop
If blnEncontrado = True Then
    MyRst.FindFirst "[Id] = " & vBusca
    Me.Bookmark = MyRst.Bookmark
Else
    MsgBox "No se ha encontrado el registro buscado", vbInformation, "NO ENCONTRADO"
End If
MyRst.Close
Set MyRst = Nothing
End Sub
---
Id -> Nombre de tu campo que contiene el valor a buscar
Ya me dirás qué tal te ha ido.
Muy agradecido por tu tiempo y conocimiento en un momento lo implementare y te comento como me fue.
OK. Si tienes algún problema me dices.
Nuevamente mil gracias por tu atención.
Te cuento que aplique el código y me sale el error 91 que dice:
"Variable de objeto o bloque Whit no establecido" cuando le doy Depurar se para en la linea que dice: "Set MyRst = Me.Recordset.Clone"
Perdoname pero creo que códigos muy similares también aplique y en algunos me salio el mismo error. Y cuando no lo saca no muestra el registro solicitado. Tratare de darme a entender mejor es que soy algo nuevo en esto: Creo primero que el problema radica en que ningún control del formulario tiene en la propiedad "Origen del Cotrol" algún valor enlazado a la tabla principal. Yo guardo los valores de los 100 controles con un botón que tiene el código de un "INSERT" y me guarda todos los valores de cada control en el campo respectivo de la tabla. Hice una copia exacta al forumalario principal que es donde se cargarían los valores de todos los 100 campos de la tabla del registro solicitado, eso es lo que pienso, pero no se como implementarlo ni siquiera se si se puede hacer.
Claro que si me hicieras el favor de decirme como solucionar ese error 91 seguiré intentándolo con tu código.
De antemano mil gracias,
Gustavo
Dos cosas:
El clonado del recordset no tiene nada que ver con los orígenes de los controles del formulario. El recordset, al clonarse, hace una "copia invisible" del conjunto de registros sobre los que se basa el formulario. Para saber en qué tabla o consulta está basado el formulario tienes que sacar las propiedades del formulario e irte a la pestaña "Datos", a la propiedad "Origen del registro". Ahí debería haber el nombre de la tabla.
Vamos a hacer una cosa: comprueba lo anterior y mira si en la propiedad te aparece el nombre de tu tabla. Si te aparece, y está bien (quiero decir, tiene el nombre de la tabla que efectivamente utilizas para guardar esos registros que das de alta), pásame el nombre de la tabla y te modificaré el código para realizar el proceso de una manera ligeramente diferente.
He creado una miniBD para probar el código y a mí me funciona correctamente. Si quieres echarle un vistazo te la puedes bajar aquí
El código está asignado al botón BUSCA REGISTRO, por si te interesa editarlo.
Ya me dirás.
No he recibido noticias tuyas. Te agradecería que, si no tienes más consultas, cerraras la pregunta.
Sigo sin recibir noticias tuyas. Te ruego que me comentes algo, porque si no tendré que descartar la pregunta, cosa que no me gusta nada.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas