Consulta select en VBA Access

Soy novato en VBA Access aunque no tanto que Excel pero estoy intentando hacer un
SELECT * mitabla WHERE idtabla = campotextoformulario
y no tengo forma de que me salga
He empezado con este código, y cuando lo controle, iré un poquito a más:
Private Sub comando52_click()
Dim base As Database
Dim rst As Recordset
Set base = CurrentDb
Set rst = base.OpenRecordset("Select * from AÑADIRRESERVA where IDRESERVA='" & Me.Texto50.Text & "'")
MsgBox rst.Fields("NOMBRE")
rst.Close
Set rst = Nothing
base.Close
Set base = Nothing
End Sub
Si alguien me puede ayudar, estaría muy agradecido.

1 respuesta

Respuesta
1
Prueba con:
Set rst = base.OpenRecordset("Select * from AÑADIRRESERVA where IDRESERVA='" & Form!Texto50.value & "'")
MsgBox rst!NOMBRE
Me cuentas.
Hola, gracias por tu rápida respuesta.
Me sigue dando un error, ahora me dice:
Error 424, se requiere un objeto
Y me señala precisamente la linea de código que me indicas:
Set rst = base.OpenRecordset("Select * from AÑADIRRESERVA where IDRESERVA='" & INTRORESERVAS.Texto50.Value & "'")
¿Qué ocurre?
Me ha faltado un signo !
Set rst = base.OpenRecordset("Select * from AÑADIRRESERVA where IDRESERVA='" & INTRORESERVAS!.Texto50.Value & "'")
Pero sigue sin funcionar, he supuesto que donde dices Form! Se refiere al nombre de mi formulario y por eso yo he puesto INTRORESERVAS! aunque tambien he probado con Form! Y siguen sin funcionar
Form NO es el nombre del formulario, es una palabra reservada de access para indicar que el cuadro de texto u otro control cualquiera pertenece al formulario que tienes activo en ese momento.
Si quieres poner el nombre del formulario tendrías que referirlo a la colección Forms y no al objeto Form. Es decir te daría lo mismo poner:
Forms!INTRORESERVAS!Texto50.Value
que:
Form!Texto50.Value
Aunque lo lógico es, si el cuadro pertenece al formulario que tienes abierto en ese momento, poner lo 2º, si te refieres a otro formulario que en ese momento no lo tienes a la vista, tendrás que utilizar obigatoriamente la 1ª opción.
No se si me he explicado bien, me cuentas saludos Angeles
Hola de nuevo y gracias por el interés mostrado, pero como te dije en el mensaje anterior, he probado las 2 formas, y con ninguna funciona.
Es más, cuando abro el formulario me salta un mensaje diciendo "Error de sintaxis en la clausula FROM"
He probado a simplificarlo más, pondiendo en el código solamente esto:
Set rst = base.OpenRecordset("Select * from AÑADIRRESERVA")
MsgBox rst!NOMBRE
Y solo me muestra el primer nombre de la tabla (¿es normal?), además de seguir dando el error de sintaxis anterior al abrir el formulario.
He estado ojeando tu web, (muy buena por cierto) pero no veo nada similar a esto que pueda ayudarme.
Bien, ya he conseguido lo que quería con este código:
Private Sub comando52_click()
Dim base As Database
Dim rst As Recordset
Set base = CurrentDb
Set rst = base.OpenRecordset("Select * from AÑADIRRESERVA where idreserva = " & Texto50.Value)
' al ser un numero lo que estaba buscando me sobraban comillas
MsgBox rst.Fields(1)
NOMBRE = rst.Fields(1)
TELF1 = rst.Fields(2)
TELF2 = rst.Fields(3)
' ...  etc
End Sub
Mostrar en los cuadros de texto según un id introducida en otro cuandro texto.
Ahora el problema lo tengo en que no sé que hacer para que una vez que modifico los cuadros de texto me guarde los cambios.
Y además, si ese numero de id no existe, ¿cómo puedo hacer para que no me muestre el típico mensaje de error de access sino a través de un msgbox?
Gracias de antemano
Respecto a la pregunta:
Y solo me muestra el primer nombre de la tabla (¿es normal?),
Sí es lo correcto, verás el recordset es una consulta de selección ni más ni menos, cuando abres un recordset, por defecto, se posiciona en el 1er registro, para recorrer todos los registro de un recordset tendrás que utilizar un bucle Do While ... Loop. Por ejemplo:
Set rst = base.OpenRecordset("Select * from AÑADIRRESERVA")
Do While Not rst.Eof  ' Es decir: mientras no sea final de fichero
MsgBox rst!NOMBRE
rst.Movenext ' Pasa al siguiente registro
Loop  ' Final del bucle
Para actualizar el registro de la tabla yo crearía un botón que ejecutase una consulta de actualización.
Supongamos que los nombre de la tabla (Tabla1) son Campo1, Campo2 y los quieres actualizar con los valores de los cuadros de texto Texto1, Texto2. El registro supongo que tiene un campo que lo identifica inequívocamente que llamaremos IdReserva y el cuadro de texto dónde lo introduces Texto50.
En el código del botón:
DoCmd.RunSql "Update Tabla1 Set Campo1='" & Form!Texto1.Value & "', Campo2='" & Form!Texto2.Value & "' Where IdReserva=" & Form!Texto50.Value & "'"
Si el IdReserva no existe en la tabla ---> el recordset rst no te devolverá ningún registro ---> será final de fichero (ya te he dicho que por defecto se posiciona en el 1er registro, si no hay 1er registro ---> final de fichero) es decir estará EOF
Private Sub comando52_click()
Dim base As Database
Dim rst As Recordset
Set base = CurrentDb
Set rst = base.OpenRecordset("Select * from AÑADIRRESERVA where idreserva = " & Texto50.Value)
If rst.eof then
Msgbox "No existe el registro"
else
' al ser un numero lo que estaba buscando me sobraban comillas
MsgBox rst.Fields(1)
NOMBRE = rst.Fields(1)
TELF1 = rst.Fields(2)
TELF2 = rst.Fields(3)
' ...  etc
end if
End Sub
Si quieres un consejo, yo el IdReserva, en vez de teclearlo lo seleccionaría en un cuadro combinado y si no existe lo daría de alta desde el propio formulario (esto tienes como hacerlo en mí página web)
Me cuentas.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas