** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Error 3141 la instrucción SELECT incluye.....
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoError 3141 la instrucción SELECT incluye.....

 Responder Responder
Autor
Mensaje
sculapio43a Ver desplegable
Nuevo
Nuevo


Unido: 22/Abril/2021
Localización: Colombia
Estado: Sin conexión
Puntos: 15
Enlace directo a este mensaje Tema: Error 3141 la instrucción SELECT incluye.....
    Enviado: 22/Abril/2021 a las 03:00
Hola a todo(as):

Espero pueda explicarme y me puedan colaborar:

Tengo un formulario principal: FHorarios
Un Subformulario: CBodega
Un ListBox: listFiltro
Un TextBox: txtQryHistorico
Tabla Origen: Horarios

Error: La instruccion SELECT incluye una palabra reservada, le falta un argumento o está mal escrito, o bien los signos de puntuación no son correctos

CBodega muestra el historico de las ultimas cinco semanas, mostrando por cada CodSap el turno y la bodega de esas cinco semanas

txtQryHistorico contiene CodSap de los registros que tenga en su momento lisFiltro

CBodega es filtrado dependiendo de los valores que estén en txtQryHistorico, atraves del CodSap. Realmente txtQryHistorico es provisional, pues si logro correr la consulta enviaría directamente el filtro hacia CBodega desde listFiltro

El codigo es:

Dim maximasem As Integer
Dim sqlfiltro As String
maximasem = DMax("[Semana]", "Horarios")

sqlfiltro = "TRANSFORM First(Temp.Valor) AS PrimeroDeValor"
sqlfiltro = sqlfiltro & " SELECT Temp.CodSAP "
sqlfiltro = sqlfiltro & " FROM (Select CodSAP, First(Bodega) As Valor "
sqlfiltro = sqlfiltro & " Semana As Campo "
sqlfiltro = sqlfiltro & " From Horarios "
sqlfiltro = sqlfiltro & " WHERE Semana Between maximasem And maximasem -5 "
sqlfiltro = sqlfiltro & " Group by CodSAP, Semana "
sqlfiltro = sqlfiltro & " Union "
sqlfiltro = sqlfiltro & " Select CodSAP, First(HoraEntrada) As Valor "
sqlfiltro = sqlfiltro & " Semana As Campo "
sqlfiltro = sqlfiltro & " From Horarios "
sqlfiltro = sqlfiltro & " WHERE Semana Between maximasem And maximasem-5 "
sqlfiltro = sqlfiltro & " Group by CodSAP, Semana) AS Temp"
sqlfiltro = sqlfiltro & " WHERE Horarios.CodSAP = Forms!FHorarios.txtQryHistorico "
sqlfiltro = sqlfiltro & " GROUP BY CodSAP "
sqlfiltro = sqlfiltro & " ORDER BY Temp.Campo DESC "
sqlfiltro = sqlfiltro & " PIVOT Temp.Campo"
Me.CBodega.Form.RecordSource = sqlfiltro



Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 22/Abril/2021 a las 08:15
Hola,

Yo pondría un punto de interrupción antes de la asignación del recordsource, copiaría la sqlfiltro y la pegaría en una consulta nueva. A ver por dónde se queja exactamente...

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
sculapio43a Ver desplegable
Nuevo
Nuevo


Unido: 22/Abril/2021
Localización: Colombia
Estado: Sin conexión
Puntos: 15
Enlace directo a este mensaje Enviado: 22/Abril/2021 a las 22:43
Hola Xavi, gracia por responder, he realizado la consulta con el asistente y efectivamente me muestra que faltaba un signo coma (resaltado en rojo) justo en estas dos lineas:
sqlfiltro = sqlfiltro & " Select CodSAP, First(HoraEntrada) As Valor, "
....
sqlfiltro = sqlfiltro & " UNION Select CodSAP, First(Bodega) As Valor, "

Adicional estaba obviando colocar " & para los campos CodSap y Semana, y por último CBodega lo pasé a ListBox en vez de SubForm. El codigo quedó así:

sqlfiltro = "TRANSFORM First(Temp.Valor) AS PrimeroDeValor"
sqlfiltro = sqlfiltro & " SELECT Temp.CodSAP "
sqlfiltro = sqlfiltro & " FROM ("
sqlfiltro = sqlfiltro & " Select CodSAP, First(HoraEntrada) As Valor, "
sqlfiltro = sqlfiltro & " Semana As Campo "
sqlfiltro = sqlfiltro & " From Horarios "
sqlfiltro = sqlfiltro & " WHERE Semana Between " & DMax("[Semana]", "Horarios") & " And " & DMax("[Semana]", "Horarios") - 5 & " and CodSAP" & Forms!FHorarios.txtQryHistorico
sqlfiltro = sqlfiltro & " Group by CodSAP, Semana"
sqlfiltro = sqlfiltro & " UNION Select CodSAP, First(Bodega) As Valor, "
sqlfiltro = sqlfiltro & " Semana As Campo "
sqlfiltro = sqlfiltro & " From Horarios "
sqlfiltro = sqlfiltro & " WHERE Semana Between " & DMax("[Semana]", "Horarios") & " And " & DMax("[Semana]", "Horarios") - 5 & " and CodSAP" & Forms!FHorarios.txtQryHistorico
sqlfiltro = sqlfiltro & " Group by CodSAP, Semana) AS Temp"
sqlfiltro = sqlfiltro & " GROUP BY CodSAP "
sqlfiltro = sqlfiltro & " ORDER BY Temp.Campo DESC "
sqlfiltro = sqlfiltro & " PIVOT Temp.Campo"
sqlfiltro = sqlfiltro

Ahora surgió otro impase, la consulta solo me arroja hasta lo resaltado en azul, es decir las cinco semanas de turno, la unio no se está ejecutando. Comparé con la consulta creada mediante asistente y todo está OK, compilé y compacté pero nada. Pensé hacer dos consultas cruzadas y despues unirlas cona tercera consulta pero creo resulta muy costoso, ya que la tabla Horarios almacena todo el año de cada uno de los CodSap y no creo conveniente. Tienes alguna sugerencia para este nuevo impase?. Muchas gracias
Arriba
sculapio43a Ver desplegable
Nuevo
Nuevo


Unido: 22/Abril/2021
Localización: Colombia
Estado: Sin conexión
Puntos: 15
Enlace directo a este mensaje Enviado: 22/Abril/2021 a las 23:04
Ah, por cierto si invierto Bodega y HoraEntrada entonces me trae solo las cinco semanas de Bodega y el resto de columnas quedan en blanco. Me disculpo por los errores ortográficos Wink
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 22/Abril/2021 a las 23:58
Hola!

Si te funciona en consulta, entonces descarga ele ejemplo de este enlace del compañero rokoko para pasar de SQL a VBA http://www.mvp-access.com/foro/sql-a-vba_topic85706.html
Un Saludo.
Arriba
sculapio43a Ver desplegable
Nuevo
Nuevo


Unido: 22/Abril/2021
Localización: Colombia
Estado: Sin conexión
Puntos: 15
Enlace directo a este mensaje Enviado: 23/Abril/2021 a las 02:52
Hola Xavi, Mounir y Rokoko, he logrado arreglar el codigo con todas sus excelentes aportaciones, quedó así:
FiltroInicial reemplazó a txtQryHistorico

sqlfiltro = "TRANSFORM First(Temp.Valor) AS PrimeroDeValor " & vbCrLf & _
"SELECT Temp.CodSAP " & vbCrLf & _
"FROM (Select CodSAP, First(Horarios.Bodega) As Valor, " & vbCrLf & _
"""BSem "" & Semana As Campo " & vbCrLf & _
"From Horarios " & vbCrLf & _
"WHERE (((Horarios.Semana) Between DMax(""[Semana]"",""Horarios"") And DMax(""[Semana]"",""Horarios"")-5)) " & vbCrLf & _
"Group by Horarios.CodSAP, Semana " & vbCrLf & _
"Union Select CodSAP, First(Horarios.HoraEntrada) As Valor, " & vbCrLf & _
"""TSem "" & Semana As Campo " & vbCrLf & _
"From Horarios " & vbCrLf & _
"WHERE (((Horarios.Semana) Between DMax(""[Semana]"",""Horarios"") And DMax(""[Semana]"",""Horarios"")-5)) " & vbCrLf & _
"Group by Horarios.CodSAP, Semana " & vbCrLf & _
")  AS Temp " & vbCrLf & _
"WHERE ((Temp.CodSAP)" & FiltroInicial & ")" & vbCrLf & _
"GROUP BY Temp.CodSAP " & vbCrLf & _
"ORDER BY Temp.Campo DESC  " & vbCrLf & _
"PIVOT Temp.Campo;"
Me.CBodega.RowSource = sqlfiltro
 
Exitos y hasta pronto
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable