Mar 22 2022 09:12 AM
Hola a todos!
Me estoy realizando una BBDD y tengo un problema con un formulario. En uno de los ComboBox que utilizo, me gustaría poner como valor por defecto el resultado de una query SQL, el problema es que no me funciona dado que no lo detecta como función.
Hay alguna otra función que permita esto? es posible hacerlo mediante VBA?
Gracias de antemano a todos!
Mar 23 2022 02:56 PM
¡Hola!
DLookUp("ColumnaDeConsulta"; "NombreDeConsulta")
Servus
Karl
************
Access News (March edition)
Access DevCon (April 28+29)
Mar 24 2022 03:22 AM
Muchas gracias @Karl_Donaubauer, pero, me gustaría mediante VBA realizar una consulta SQL (Select) que devuelve solamente un valor y que este valor sea el valor por defecto de un Cuadro combinado.
Ya he localizado la forma de establecer un valor por defecto en un cuadro combinado mediante VBA, pero no se como realizar una consulta SELECT a una tabla de este mismo fichero Access, como se hace?
Gracias de antemano.
Mar 24 2022 04:22 AM
Solution¡Hola!
Con un evento adecuado (abrir el formulario o algo así) puedes utilizar un código como éste:
Dim rs As DAO.Recordset
Dim strSQL As String
strSQL = "SELECT Campo1 " & _
" FROM Tabla " & _
" WHERE Id=42"
Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If Not rs.BOF Then
Forms!Formulario1!Combo1.DefaultValue = rs!Campo1
End If
Servus
Karl
************
Access News (March edition)
Access DevCon (April 28+29)
Mar 24 2022 04:36 AM
Hola @Karl_Donaubauer
Una vez mas, muchas gracias por tu respuesta, he tomado tu ejemplo como plantilla y he desarrollado lo siguiente, pero no funciona, no me da ningún error, pero la casilla sigue vacía.
Que puede ser?
Mar 24 2022 04:59 AM
¡Hola!
¿Has comprobado si tu texto SQL devuelve un valor? P.e. establece un punto de interrupción y comprueba el valor de Campo1 o antes del If Not...
Debug.Print rs!Campo1
o
MsgBox rs!Campo1
o después de asignar el valor por defecto:
Debug.Print Me!nombre_caja.DefaultValue
para verlo en la ventana directa.
Servus
Karl
************
Access News (March edition)
Access DevCon (April 28+29)
Mar 24 2022 05:10 AM
Hola, he establecido varios puntos de control pero ninguno devuelve nada, cuando abro el formulario no me aparece ningún Message Box ni ningún print en pantalla.
He probado a poner directamente un nombre se usuario y quitar la función fncUsurio pero sigue sin devolver nada. Que puede ser?
Mar 24 2022 06:38 AM
¡Hola!
Parece que tu Sub usario_defecto no se ejecuta. ¿Dónde y cómo se llama? En mi primera respuesta de hoy, mencioné que necesitas un evento adecuado que active el código.
Servus
Karl
************
Access News (March edition)
Access DevCon (April 28+29)
Mar 24 2022 06:47 AM
Hola @Karl_Donaubauer,
Soy nuevo programando en VBA, tengo el código aquí, por lo que entiendo se ejecuta cuando se abre el formulario, no?
Gracias!
Mar 24 2022 07:10 AM
¡Hola!
No, si quieres que el código se ejecute al abrir el formulario, entonces ve a las propiedades del formulario y busca la propiedad "Al abrir" (al menos creo que así se llama en el Access español). Haz clic ahí y luego en el botón del editor (con los 3 puntos) que está a la derecha.
A continuación, se crea un procedimiento Form_Open (https://docs.microsoft.com/es-es/office/vba/api/access.form.open), en el que copias tu código para que sea llamado cuando se abra el formulario.
Otro método es que no copies el código en el nuevo procedimiento Form_Open, sino que en el procedimiento Form_Open llames a tu procedimiento existente. Esto puede hacerse simplemente con su nombre:
usario_defecto
Sin embargo, esto sólo tiene sentido si llamas al procedimiento en varios puntos.
Servus
Karl
************
Access News (March edition)
Access DevCon (April 28+29)
Mar 24 2022 07:23 AM
Oh, ¡muchas gracias!
Ahora si que ejecuta la función, pero, da un error.
Muchas gracias por la ayuda que me esta brindando, me esta siendo de mucha ayuda aprendiendo VBA 😉
Mar 24 2022 07:41 AM
¡Hola!
Falta la referencia a la biblioteca DAO. En el editor VBA, selecciona la opción de menú Herramientas - Referencias (si es que se llama así en el Access español 😉 y busca allí en la lista:
Microsoft Office x.0 Access Database Engine Object Library
Donde x depende de tu versión de Access. En las versiones más recientes x=16. Marca esta casilla y el código DAO debería funcionar.
Servus
Karl
Access News (new March episode)
Access DevCon (April 28+29)
Mar 24 2022 07:56 AM
Hola, muchas gracias una vez mas, siento hacer tantas preguntas, pero es que no termina de funcionar correctamente, pero parece que poco a poco vamos avanzando.
Una vez mas, no se que falla exactamente...:
Mar 24 2022 08:21 AM
¡Hola!
No es de extrañar que no haya nombres de campo. Vuelve a mirar mi ejemplo en el que había utilizado "Campo1" para ello. Contigo debería decirse:
rs!nombre
Servus
Karl
Access News (new March episode)
Access DevCon (April 28+29)
Mar 24 2022 09:49 AM
Hola Karl, muchas gracias por la ayuda, ahora parece que falla otra instrucción:
Muchísimas gracias.
Mar 24 2022 10:12 AM
¡Hola!
Tu fncUsuario devuelve un texto. Por eso faltan las comillas:
strSQL = "SELECT nombre FROM fichaje WHERE usuario_registrado = '" & fncUsuario & "'"
Servus
Karl
Access News (new March episode)
Access DevCon (April 28+29)
Mar 25 2022 09:37 AM - edited Mar 25 2022 09:38 AM
Muchísimas gracias @Karl_Donaubauer, ya funciona todo a la perfección. Mil gracias!!!!! 🙂
Mar 24 2022 04:22 AM
Solution¡Hola!
Con un evento adecuado (abrir el formulario o algo así) puedes utilizar un código como éste:
Dim rs As DAO.Recordset
Dim strSQL As String
strSQL = "SELECT Campo1 " & _
" FROM Tabla " & _
" WHERE Id=42"
Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If Not rs.BOF Then
Forms!Formulario1!Combo1.DefaultValue = rs!Campo1
End If
Servus
Karl
************
Access News (March edition)
Access DevCon (April 28+29)