Problema con consulta VBA

Hola que tal buenas tardes!

Estoy haciendo una base de datos en la que requiero lo siguiente.

Tengo un menu donde pondré los botones para mostrar un informe basado en una consulta con un filtro ya hecho.

La vdd estoy aprendiendo vba con la web de Neckkito y sus ejemplos, así que no se mucho, me base en lo que mas o menos he visto para hacer el siguiente código:

Public Sub ñam(elForm As String, numConsulta As Byte)
Dim miSql As String
Dim resp As Integer
Dim rst As DAO.Recordset
'Creamos el inicio de la consulta
miSql = "SELECT DOCUMENTOS.No, DOCUMENTOS.GIRADOPOR,DOCUMENTOS.DIRIGIDOA, DOCUMENTOS.FECHADEELABORACIÓN,DOCUMENTOS.FECHADERECIBIDO," _
& " DOCUMENTOS.NODEDOCUMENTO, DOCUMENTOS.DOCUMENTO, DOCUMENTOS.TIPO, DOCUMENTOS.ASUNTO,DOCUMENTOS.ÁREA,DOCUMENTOS.SEGUIMIENTO,"
Select Case numConsulta
Case 1
'Acabamos de construir la SQL con las tareas no completadas
'y sobre las que ya se haya entrado en periodo de preaviso.
miSql = miSql _
& " DOCUMENTOS.ÁREA FROM DOCUMENTOS WHERE DOCUMENTOS.ÁREA=ENTRADA CSGZ AND DOCUMENTOS.ÁREA=ENTRADA PC AND DOCUMENTOS.ÁREA=ENTRADA UDIZ"
Case 2
'Acabamos de construir la SQL con las tareas no completadas
'y sin vencimiento
miSql = miSql _
& " DOCUMENTOS.ÁREA FROM DOCUMENTOS WHERE DOCUMENTOS.ÁREA=SALIDA CSGZ"
Case 3
'Acabamos de construir la SQL con las tareas completadas
miSql = miSql _
& " DOCUMENTOS.ÁREA FROM DOCUMENTOS WHERE DOCUMENTOS.ÁREA=SALIDA PC"
Case 4
'Acabamos de construir la SQL para las tareas del día seleccionado
'que no estén finalizadas
miSql = miSql _
& " DOCUMENTOS.ÁREA FROM DOCUMENTOS WHERE DOCUMENTOS.ÁREA=SALIDA UDIZ"
End Select
'Creamos el recorset sobre la SQL
Set rst = CurrentDb.OpenRecordset(miSql)
'Abrimos FInfo en vista diseño y oculto
DoCmd.OpenForm "DOCUMENTOS3", acDesign, , , , acHidden
'Le indicamos que su origen de datos es nuestra SQL
Forms!DOCUMENTOS3.RecordSource = miSql
'Cerramos FInfo guardando los cambios
DoCmd.Close acForm, "DOCUMENTOS3", acSaveYes
'Cerramos el formulario actual
DoCmd.Close acForm, elForm
'Abrimos FInfo para ver la información y editarla
DoCmd.OpenForm "DOCUMENTOS3", , , , acFormEdit
Forms!FInfo.AllowAdditions = False
Salida:
'Cerramos conexiones y liberamos memoria
rst.Close
Set rst = Nothing
End Sub

DOCUMENTOS es la tabla y los valores de Entrada PC, Entrada CSGZ son valores que declare en la misma tabla en la parte de búsqueda, lista de valores.

Al darle al botón la llamada del sub programa me sale error an Set rst = CurrentDb.OpenRecordset(miSql) pero el msgbox sale todo lo que corresponde al caso que elijo.

Espero me puedas ayudar y tenme paciencia, voy aprendiendo conforme la marcha.

1 respuesta

Respuesta
1

Un par de cosas:

1º/ No te hace falta crear el recordset, por lo que estas lineas te sobrarían:

Dim rst As DAO.Recordset

'Creamos el recorset sobre la SQL
Set rst = CurrentDb.OpenRecordset(miSql)

Salida:
'Cerramos conexiones y liberamos memoria
rst.Close
Set rst = Nothing

2º/ Esta variable que declaras, también sobra, pues no la usas en ninguna parte del código:

Dim resp As Integer

3º/ Te comento la SQL del Case 1 (el resto funcionaria igual): los valores por los que filtras, al ser de tipo texto, tienen que ir en la SQl entre comillas simples, tal que así:

miSql = miSql _
& " DOCUMENTOS.ÁREA FROM DOCUMENTOS WHERE DOCUMENTOS.ÁREA='ENTRADA CSGZ' AND DOCUMENTOS.ÁREA='ENTRADA PC' AND DOCUMENTOS.ÁREA='ENTRADA UDIZ'". De todos modos, esta consulta en concreto no creo que te funcione, pues si sólo tienes un campo Área, nunca va a poder tomar los tres valores. Si lo que quieres es que te muestre los registros que tengan cualquiera de las tres áreas, cambia los AND por OR.

4º/ DoCmd. OpenForm sirve para abrir Formularios, para abrir Informes se usa DoCmd. OpenReport. Lo mismo con DoCmd. Close acForm(para formularios) o acReport (para informes) En tu código estás abriendo un formulario llamado DOCUMENTOS 3.

Aquí ya no sé si lo que pretendes abrir es un formulario o un informe (supongo que formulario, pues intentas abrirlo en "modo edición")

En fin, que corrigiendo las SQL según lo que te digo en el punto 3, te debería funcionar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas