Buscar reigstro ID VBA Access

Estoy aprendiendo un poco de vba, en Access, pero estoy teniendo problemas, lo que trato de hacer es que al ingresar el ID en un campo de texto de un formulario, al hacer clic en un botón, este realice la búsqueda correspondiente al valor ingresado y muestre uno de los campos de la consulta en otro cuadro de texto de mi formulario, esto es lo que he intentando...

Private Sub consultar_Click()

Dim modl As String
Dim ids As Integer

ValCustID = Me.idx.Value

modl = "SELECT Modelo " & "FROM Motores " & "WHERE id='" & ids & "';"

Modelox.Value = modl

End Sub

Y este es el formulario y su comportamiento cuando ingreso ID de registro existente, y si ingreso un ID muy largo manda error de desbordamiento

2 Respuestas

Respuesta
2

Por curiosidad: ¿Por qué no utilizar Dlookup...?. Mis saludos >> Jacinto

Es para una clase, pero el profe no quiere que usemos Dlookup sino mediante SQL   

Si el ejemplo de éste enlace, te ayuda. Es una búsqueda con LIKE. Tiene un cuadro de texto y un ListBox, como creo que tienes tu.

https://sites.google.com/site/jerrmex/descargas 

El ejemplo es el número 14. Un saludo >> Jacinto

Respuesta
2

Primer error: al cuadro de texto le estás dando un valor de texto (la SQL de una consulta), no el resultado de la consulta. Utiliza mejor la función DLookUp:

modl = DLookup("Modelo","Motores","id=" ValCustID)

Segundo error: la variable ValCustID no la declaras, y sin embargo, declaras ids como integer y la usas sin asignarle un valor.

Tercer error: el tamaño de la variable a de ser adecuado a su contenido. Un integer solo admite números hasta el 32,767. SI necesitas más, tendrás que declararla como Long u otro tipo.

Resumiendo, tu código debería quedarte así:

Private Sub consultar_Click()

Dim modl As String
Dim ids As Integer

ids = Me.idx.Value

modl = DLookup("Modelo","Motores","id=" ValCustID)

Modelox= modl

End Sub

Un saludo


Gracias por responder Sveinbjorn El Rojo,  lo que sucede es que  no quieren que use  DLookup, forzosamente requiero de código SQL, ¿Es posible esto?  

Si usas un recordset para ejecutar la consulta sí es posible. Directamente una SQL no se me ocurre cómo podrías.

Como podría implementar el recordset ?, estoy intentando algo como esto que encontré en Internet, pero me manda error de compilación... gracias de antemano    

Private Sub cm5_Click()
Dim dbs As DAO.Database
Dim rsSQL As DAO.Recordset
Dim strSQL As String
Set dbs = CurrentDb
Dim ids As Long
ids = Me.idx.Value
strSQL = "SELECT Modelo " & "FROM Motores " & "WHERE id='" & ids & "';"
Set rsSQL = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
Modelox.Value = rsSQL
End Sub

Perdón  el código anterior me manda error 3078, no puede encontrar la tabla o consulta motores 

Perdón. es que escribí mal la tabla, ya corregido lo anterior el código es el siguiente:

Private Sub cm5_Click()
Dim dbs As DAO.Database
Dim rsSQL As DAO.Recordset
Dim strSQL As String
Set dbs = CurrentDb
Dim ids As Long
ids = Me.idx.Value
strSQL = "SELECT Modelo " & "FROM inventario " & "WHERE id='" & ids & "';"
Set rsSQL = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
Modelox.Value = rsSQL
End Sub

  Y me arroja el error código: 3061  pocos parámetros, se esperaba 1  

Private Sub cm5_Click()
Dim dbs As DAO.Database
Dim rsSQL As DAO.Recordset
Dim strSQL As String
Set dbs = CurrentDb
Dim ids As Long
ids = Me.idx.Value
strSQL = "SELECT Modelo " & "FROM inventario " & "WHERE id=" & ids & 
Set rsSQL = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
If rsSQL.RecordCount=0 Then
MsgBox "Id no encontrado"
Me.Modelox=""
Else
Me.Modelox=rsSQL("Modelo")
End If
rsSQL.Close
dbs.Close
Set rsSQL=Nothing
Set dbs=Nothing
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas