Imprimir página | Cerrar ventana

¿ Pasar una SQL a una consulta que existe en BD ?

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85855
Fecha de impresión: 26/Marzo/2026 a las 18:58


Tema: ¿ Pasar una SQL a una consulta que existe en BD ?
Publicado por: Jesus L
Asunto: ¿ Pasar una SQL a una consulta que existe en BD ?
Fecha de publicación: 04/Marzo/2021 a las 17:14

Hola a tod@s,

Sirvan estas primeras lineas para hacer una presentación, ya que no he encontrado en el foro donde hacerlo.  Gracias por admitirme.


Estoy haciendo para la empresa en la que trabajo de una gestión de costes. Para ello he creado la BD en Access  y gestiono los partes de trabajo mediante un formulario que funciona perfectamente.  El problema lo tengo al sacar esos partes en un informe.   Me intentaré explicar mejor.

 

La BD tiene entre otras 2 tablas que guardan los partes de trabajo. Una de se llama “ CabeceraPartes” y la otra “ LineasPartesTrabajao”. En la Cabecera se guardan los datos del trabajador, la fecha,  la obra en la que trabajan, entre otros, y en la segunda, se guardan las distintas obras, el tiempo, el costo, etc, etc, de cada trabajador y para ese día.

 

La cosa es que necesito sacar un listado con los partes de trabajo de la obra que seleccione el usuario en el menú principal. Es decir, en el menú principal al hacer click en la casilla de verificación de “Informe partes de mano de obra “,  se activan 2 cuadros en los que se le pide al usuario que introduzca el código de la obra y el capítulo de dicha obra, en definitiva 2 parámetros.

 

Una vez que tengo los datos de la obra que quiere el usuario listar,  hago  click sobre el botón “Vista Previa”, también situado en el formulario MenuPrincipal  y construyo la siguiente instrucción SQL:  ( Voy a separar las partes para que se vea más claro )

 

SELECT CabeceraPartes.Codigo_Trabajador, CabeceraPartes.Nombre_Trabajador, CabeceraPartes.Año, LineasPartesTrabajo.Numero_Parte, LineasPartesTrabajo.Fecha_Parte, LineasPartesTrabajo.Codigo_Obra, LineasPartesTrabajo.Capitulo_Obra, LineasPartesTrabajo.Horas_Trabajadas, LineasPartesTrabajo.Codigo_Seccion, LineasPartesTrabajo.Precio_Hora, LineasPartesTrabajo.Concepto, LineasPartesTrabajo.Total_linea

 

FROM CabeceraPartes RIGHT JOIN LineasPartesTrabajo ON CabeceraPartes.[Numero_Parte] = LineasPartesTrabajo.[Numero_Parte]

 

WHERE (((LineasPartesTrabajo.Codigo_Obra)=888) AND ((LineasPartesTrabajo.Capitulo_Obra)=2))

 

ORDER BY CabeceraPartes.Codigo_Trabajador, LineasPartesTrabajo.Fecha_Parte;

 

 

A partir de ahí es donde no sé seguir.  La consulta existe, es más cuando pongo la  instrucción arriba indicada, funciona perfectamente.  En este caso estoy forzando que me lista los datos dela obra 888  y el capítulo 2 de dicha obra.  Pero claro, eso no puede ser. El informe debe listar la obra que selecciones el usuario en el menú principal en las casillas habilitadas para tal efecto.

 

La pregunta es ¿ cómo se hace para poderle pasar la instrucción SQL a  la consulta  “Consulta_Partes_Trabajo”?.  Especificar que los datos de la obra y su capitulo  que debo consultar se extraen  de 2 cuadros de textos del formulario MenuPrincipal.

 

Si hay algo que no  está claro, por favor, no dudéis en decírmelo. Intento responder rápido.

 

Saludos y gracias de antemano.

 

 



-------------
Siempre aprendiendo.



Respuestas:
Publicado por: rokoko
Fecha de publicación: 04/Marzo/2021 a las 17:51
Algo asi... pruebalo a ver
WHERE (((LineasPartesTrabajo.Codigo_Obra)=Forms!NombreFormulario!NombreCuadroTexto) AND ((LineasPartesTrabajo.Capitulo_Obra)=Forms!NombreFormulario!NombreCuadroTexto))



Si esa SQl la has sacado de una consulta, en criterios de esos campos que quieres filtrar por Formularios!NombreFormulario!NombreCuadroTexto,  pasa a vista sql y veras como queda


Publicado por: Jesus L
Fecha de publicación: 04/Marzo/2021 a las 18:50
Gracias @rokoko por tu respuesta.

El problema es que no sé dónde tengo que poner la instrucción para que cuando pulse el botón Vista Previa funcione.

Saludos

-------------
Siempre aprendiendo.


Publicado por: rokoko
Fecha de publicación: 04/Marzo/2021 a las 19:30
Publicado originalmente por Jesus L Jesus L escribió:

Gracias @rokoko por tu respuesta.

El problema es que no sé dónde tengo que poner la instrucción para que cuando pulse el botón Vista Previa funcione.

Saludos

Intruccion te refieres a la consulta en SQL??
Por lo que he entendido la quieres en un informe y un formulario?'

En un informe deberia ir con Recordsource....en el Evento al abrir del informe  Me.RecordSource="Select....."  o Tambien basado en consulta norma.l

Y en el formulario igual o basado en una consulta normal y en en un boton un Me.Requery para que una vez actualices los cuadros de texto se actualice el formulario con los nuevos datos filtrados...


En ambos casos SQL o consulta normal deberian ir como criterio lo que te he explicado antes, para que pille los datos de los cuadros de texto



Saludos


Publicado por: Jesus L
Fecha de publicación: 05/Marzo/2021 a las 13:05
Publicado originalmente por rokoko rokoko escribió:

Instruccion te refieres a la consulta en SQL??
   Efectivamente. Con Instruccion me refiero a todo el chorizaco de texto del  "  SELECT ....

Publicado originalmente por rokoko rokoko escribió:

Por lo que he entendido la quieres en un informe y un formulario?' 
No exactamente. Lo que tengo es un formulario llamado MenuPrincipal  y ahí es donde se capturan los datos de la obra que vamos a listar en 2 cuadros de texto. Uno para el código de la obra y otro para el capitulo.   Ese formulario tiene un botón, al que yo llamo "Vista previa" y al hacer click lo que hace es lanzarme el " Informe Consultas_Partes_Trabajo".  Este informe a su vez tiene la propiedad "  Origen del Registro" en una consulta llamada "Consulta_partes_Trabajo", que tiene la instrucción SQL que hemos visto arriba.

Con la información que me has facilitado, 
Publicado originalmente por rokoko rokoko escribió:

En un informe deberia ir con Recordsource....en el Evento al abrir del informe  Me.RecordSource="Select....."  
   he podido hacer que el informe me salga en pantalla, es decir en vista previa. 

El procedimiento de al abrir el Informe ha quedado así.

Private Sub Report_Open(Cancel As Integer)
Dim StrSQL, Linea1, linea2, linea3, linea4 As String

 Linea1 = "SELECT CabeceraPartes.Codigo_Trabajador, CabeceraPartes.Nombre_Trabajador, CabeceraPartes.Año, LineasPartesTrabajo.Numero_Parte, LineasPartesTrabajo.Fecha_Parte, LineasPartesTrabajo.Codigo_Obra, LineasPartesTrabajo.Capitulo_Obra, LineasPartesTrabajo.Horas_Trabajadas, LineasPartesTrabajo.Codigo_Seccion, LineasPartesTrabajo.Precio_Hora, LineasPartesTrabajo.Concepto, LineasPartesTrabajo.Total_linea "
   linea2 = "FROM CabeceraPartes RIGHT JOIN LineasPartesTrabajo ON CabeceraPartes.[Numero_Parte] = LineasPartesTrabajo.[Numero_Parte]"
   linea3 = "WHERE (((LineasPartesTrabajo.Codigo_Obra) = " & Form_MenuPrincipal.Txt_Obra.Value & ") AND ((LineasPartesTrabajo.Capitulo_Obra) = " & Form_MenuPrincipal.Txt_Capitulo & ")) "
   linea4 = "ORDER BY CabeceraPartes.Codigo_Trabajador, LineasPartesTrabajo.Fecha_Parte;"
   StrSQL = Linea1 + linea2 + linea3 + linea4
   ' Debug.Print StrSQL
   ' Asignamos la Instruccion SQL a la consulta conla propiedad RecorSource
   Me.RecordSource = StrSQL
End Sub




Como digo, ahora funciona, aunque no como yo quisiera.  En las pruebas de vista previa que hice, cada trabajador tiene asignada una hoja.  Es decir, en la pagina 1, se indica el nombre y código del primer trabajador  y mas abajo, en el detalle, todas las horas que ha Trabajado en cada día del mes. 
Luego en el Pie del código del trabajador aparece la suma de las horas trabajadas.  Aquí en la sección de "Pie del código del trabajador" tengo puesto la propiedad del formato " Forzar nueva pagina " = Después de la sección.  De este modo me aseguraba que cada trabajador tuviera una pagina, aunque me saliera una ultima pagina en blanco. Pero no está funcionando así.   Ahora coloca el informe ordenado por trabajador y sumando su horas, pero no respeta el forzado de nueva pagina con cada cambio de trabajador. 

¿ Que es lo que estoy haciendo mal  ??.
Gracias de antemano y saludos.


-------------
Siempre aprendiendo.



Imprimir página | Cerrar ventana