Como recuperar un campo de una tabla desde VBA ACCESS

Gracias a las respuestas de este foro he conseguido avanzar en el diseño de una aplicación que estoy haciendo para mi propio negocio. Conozco otros lenguajes de programación pero el mundo de access me ha enganchado de nuevo gracias a este foro.

Mi pregunta es.

Como puedo recuperar desde un formulario, el valor del campo "PTE-ANT" (pendiente anterior o lo que dejo a deber de la última consulta) de mi tabla "TAB-CONSULTAS" correspondiente a la última consulta a la que asistió un paciente cuyo código tengo almacenado en la variable (auxidpaciente), para un doctor determinado que le atendió (auxdoctor) ya que puede visitar a distintos doctores y tener distintos datos para cada uno. Todos ellos campos de esta tabla.

Al margen de montar la select correctamente, solo necesito el ultimo registro, he pensado utilizar la intrucción Set Rs = Db.OpenRecordset(strSQL, dbOpenDynaset) como he visto en otra pregunta, pero me da el error 3061 "pocos parametros se esperaba 1

Copio el código completo por si alguien me puede ayudar.

    Dim strSQL, VariableName
    Dim Db As Database
    Dim Rs As Recordset
    Set Db = CurrentDb()
    strSQL = "SELECT [TAB-consultas].[Pte-ant] FROM [TAB-CONSULTAS] WHERE [TAB-consultas].[ID-PACIENTE]='" & auxidpaciente & "' "
    Set Rs = Db.OpenRecordset(strSQL, dbOpenDynaset) <---error
    Rs.MoveFirst
    VariableName = Rs![pte-ant]

He puesto una select sencilla para probar.

1 respuesta

Respuesta
1

Si tab-consultas es una tabla, e auxidpaciente es un campo numérico, es probable que el error te venga por las comillas simples al definir la SQL:

 strSQL = "SELECT [TAB-consultas].[Pte-ant] FROM [TAB-CONSULTAS] WHERE [TAB-consultas].[ID-PACIENTE]=" & auxidpaciente 

Grracias por tu pronta respuesta.

Pues van por ahí los tiros pero no ese el problema.

tab-consultas es una tabla, correcto, pero auxidpaciente es alfanumérico, con lo que las comillas están bien.

Pero he hecho una prueba cambiando en la select PTE-ANT que es de tipo moneda por otro campo cualquiera de la tabla tipo texto y si me ha funcionado, con lo que entiendo que el problema es porque el campo que intento recuperar es de tipo moneda.

¿Qué debo cambiar?.

El que sea de un tipo u otro (texto, moneda...) no es el problema. El error lo que te está indicando es que hay un parámetro que no se lo estas pasando.

Pregunta: ¿PTE-ANT es un campo calculado directamente en la tabla?

No, es un campo normal de la tabla TAB-CONSULTAS.

La única diferencia que veo con el otro campo que he probado es que es de tipo moneda y el otro de tipo texto. Seguro que hay algo más que se me escapa.

Perdona, pero no se como pasarte una imagen de la definición de la tabla.

Bueno, he probado con otro campo tipo moneda de la tabla, (y que también tiene un guión en el nombre) [coste-lab] y me ha funcionado perfectamente.

Evidentemente es algo concreto de este campo y no se muy bien que puede ser, será cuestión de darle a la cabeza.

Si me puedes ayudar a construir la select a la que me refería al principio perfecto, sino no te preocupes, es cuestión de ir dándole vueltas al asunto.

Agradezco mucho tu ayuda.

Puedes insertarla en la respuesta, usando la barra de menu que aparece arriba de la misma. Para sacar una imagen, usa el botón "imp pant" y la pegas en Paint u otro editor de imágenes que tengas en tu PC.

El error que comentas es muy raro, a mí el tipo de campo nunca me dió problemas..

Puedes intentar otra cosa, en vez de usar un recordset, usa la función DLast para traer ese valor:

VariableName=DLast("[PTE-ANT]","[TAB-consultas]","[ID-PACIENTE]='" & auxidpaciente & "'"

Además, te recomendaría que siempre declares el tipo de variable que vas a usar, porque con la linea Dim strSQL, VariableName estás declarando las dos como Variant, cuando strSQl es de texto y VariableName en este caso es de tipo moneda:

Dim strSQL As String, VariableName As Currency

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas