Mostrar últimos X registros en un formulario a partir de un cuadro de texto con muchos campos

Tengo otro problema en otra pantalla que tiene más campos. Lo he intentado hacer como en la anterior pero en la SQL se me pasa a otra línea, cuando la meto en VBA, ¿puede ser que la entienda mal al ser tan larga y se me pase de línea?

miSQL = "SELECT TOP " & Me.Ver_reg & " " & "INC_enviada.Revisado_jefe, INC_enviada.Detectada_en, [Detectada_en] & ' ' & [Linea] AS Union_zona_linea, INC_enviada.Sección, INC_enviada.Ver_todas, Operarios_directos.Operario, Causa.Descripción AS Descripción_causa, Estados_INC.Colorear, INC_enviada.Id, INC_enviada.Linea, INC_enviada.ESF, INC_enviada.Modelo, INC_enviada.Descripción_grupo, INC_enviada.Fecha_INC, INC_enviada.Descripción_parte_trabajo, INC_enviada.Departamento, INC_enviada.Nº_Causa, INC_enviada.Tiempo_min, INC_enviada.Cod_Operario, INC_enviada.Op_Inc, INC_enviada.[Causa Operario], INC_enviada.[Resumen causa], INC_enviada.[CLASIFICACION FUNCION GRAVEDAD], INC_enviada.[CLASIFICACION FUNCION REPETICION], INC_enviada.[PLAN DE ACCION], INC_enviada.SEGUIMIENTO, INC_enviada.[FECHA INICIO], INC_enviada.[FECHA REVISION], INC_enviada.[ACCION EXTERNA A PRODUCCION], INC_enviada.Hora_Act, INC_enviada.INC_Info FROM ((INC_enviada LEFT JOIN Operarios_directos ON INC_enviada.Cod_Operario = Operarios_directos.Nº_op)"
LEFT JOIN Causa ON INC_enviada.Nº_Causa = Causa.Causa) LEFT JOIN Estados_INC ON INC_enviada.Revisado_jefe = Estados_INC.Estado WHERE (((INC_enviada.Revisado_jefe) Like "REV*") AND ((INC_enviada.Detectada_en)=[Formularios]![Entrada]![Detectada_en])) OR (((INC_enviada.Revisado_jefe) Like "REV*") AND (([Detectada_en] & ' ' & [Linea])=[Formularios]![Entrada]![Union_zona_linea])) OR (((INC_enviada.Revisado_jefe) Like "REV*") AND ((INC_enviada.Sección)=[Formularios]![Entrada]![Seleccion_linea])) OR (((INC_enviada.Revisado_jefe) Like "REV*") AND ((INC_enviada.Ver_todas)=[Formularios]![Entrada]![Seleccion_linea]))"

Me marca error de sintaxis y me selecciona toda la línea de abajo.

2 respuestas

Respuesta
2

No entiendo esta linea

SELECT TOP " & Me.Ver_reg & " " & "INC_enviada.Revisado_jefe, 

No digo que no tengas alguna razón, ya que no he revisado tamaña instrucción, pero después de la variable " & me.Ver_reg & " no le veo sentido a poner

" & " inc.....

Mira si tengo una consulta Consulta1

Por otro lado tengo un formulario Clientes al que le he puesto un cuadro de texto NReg

En Nreg le pongo 4 y me pregunta que pais quiero. Pongo Alemania y

En el evento Después de actualizar del cuadro de texto Nreg tengo puesto

Me.RecordSource = "select top " & Nreg & " nombrecompañia, nombrecontacto,ciudad,pais, idcliente from consulta1 where pais like [escriba uno]"

Respuesta
2

Imagino que es en esta parte donde te hace la segunda línea :

...ON INC_enviada.Cod_Operario = Operarios_directos.Nº_op)"
LEFT JOIN Causa ON INC_enviada

Si estoy en lo cierto, cambialo por:

...ON INC_enviada.Cod_Operario = Operarios_directos.Nº_op)" _

& " LEFT JOIN Causa ON INC_enviada... 

( fíjate en el espacio antes del LEFT)

Además,  cambia todos los

Like "REV*"

Por

Like 'REV*'

Es decir, las comillas dobles por simples.

Buenos días, si estas en lo cierto, pero no puedo poner el guión del final, ya que no me deja meter más caracteres en esa línea:

...ON INC_enviada.Cod_Operario = Operarios_directos.Nº_op)" _

miSQL = "SELECT TOP " & Me.Ver_reg & " " & "INC_enviada.Revisado_jefe, INC_enviada.Detectada_en, [Detectada_en] & ' ' & [Linea] AS Union_zona_linea, INC_enviada.Sección, INC_enviada.Ver_todas, Operarios_directos.Operario, Causa.Descripción AS Descripción_causa, Estados_INC.Colorear, INC_enviada.Id, INC_enviada.Linea, INC_enviada.ESF, INC_enviada.Modelo, INC_enviada.Descripción_grupo, INC_enviada.Fecha_INC, INC_enviada.Descripción_parte_trabajo, INC_enviada.Departamento, INC_enviada.Nº_Causa, INC_enviada.Tiempo_min, INC_enviada.Cod_Operario, INC_enviada.Op_Inc, INC_enviada.[Causa Operario], INC_enviada.[Resumen causa], INC_enviada.[CLASIFICACION FUNCION GRAVEDAD], INC_enviada.[CLASIFICACION FUNCION REPETICION], INC_enviada.[PLAN DE ACCION], INC_enviada.SEGUIMIENTO, INC_enviada.[FECHA INICIO], INC_enviada.[FECHA REVISION], INC_enviada.[ACCION EXTERNA A PRODUCCION], INC_enviada.Hora_Act, INC_enviada.INC_Info FROM ((INC_enviada LEFT JOIN Operarios_directos ON INC_enviada.Cod_Operario = Operarios_directos.Nº_op _
& " LEFT JOIN Causa ON INC_enviada.Nº_Causa = Causa.Causa) LEFT JOIN Estados_INC ON INC_enviada.Revisado_jefe = Estados_INC.Estado WHERE (((INC_enviada.Revisado_jefe) Like 'REV*') AND ((INC_enviada.Detectada_en)=[Formularios]![Entrada]![Detectada_en])) OR (((INC_enviada.Revisado_jefe) Like 'REV*') AND (([Detectada_en] & ' ' & [Linea])=[Formularios]![Entrada]![Union_zona_linea])) OR (((INC_enviada.Revisado_jefe) Like 'REV*') AND ((INC_enviada.Sección)=[Formularios]![Entrada]![Seleccion_linea])) OR (((INC_enviada.Revisado_jefe) Like 'REV*') AND ((INC_enviada.Ver_todas)=[Formularios]![Entrada]![Seleccion_linea])) "

Ya funciona, hasta que no he metido un espacio después de Me.Ver_reg , no me ha funcionado bien.

El problema lo tengo ahora cuando lo aplico al cuadro de texto en el evento Después de actualizar,

Me dice Error de sintaxis en la operación Join.

También he visto que me ha quitado el paréntesis de cierre en Operarios_directos.Nº_op )_

A ver, empezando por el final:

.- No he quitado ningún paréntesis

.- El guión tienes que ponerlo DESPUÉS de las comillas dobles

Para solucionar lo de que no te deja poner el guión, tienes dos opciones:

1º/ ponerlo antes para cortar la cadena en un punto anterior (puedes hacer varias lineas), por ejemplo partir la cadena antes del FROM:

"SELECT .... INC_enviada.INC_Info " _

& " FROM ((INC_enviada LEFT JOIN ...."

2º/ olvidarte del _ y encadenar las dos líneas así:

miSQL="SELECT ..."

miSQL=miSQL & " LEFT JOIN Causa ON ...."

No, no decía que habias quitado un paréntesis, quería decir que no se porque el paréntesis ese se había quitado.

He visto mas sencillo hacer lo segundo y he encadenado las dos líneas asi:

miSQL = "SELECT TOP " & Me.Ver_reg & " " & "INC_enviada.Revisado_jefe, INC_enviada.Detectada_en, [Detectada_en] & ' ' & [Linea] AS Union_zona_linea, INC_enviada.Sección, INC_enviada.Ver_todas, Operarios_directos.Operario, Causa.Descripción AS Descripción_causa, Estados_INC.Colorear, INC_enviada.Id, INC_enviada.Linea, INC_enviada.ESF, INC_enviada.Modelo, INC_enviada.Descripción_grupo, INC_enviada.Fecha_INC, INC_enviada.Descripción_parte_trabajo, INC_enviada.Departamento, INC_enviada.Nº_Causa, INC_enviada.Tiempo_min, INC_enviada.Cod_Operario, INC_enviada.Op_Inc, INC_enviada.[Causa Operario], INC_enviada.[Resumen causa], INC_enviada.[CLASIFICACION FUNCION GRAVEDAD], INC_enviada.[CLASIFICACION FUNCION REPETICION], INC_enviada.[PLAN DE ACCION], INC_enviada.SEGUIMIENTO, INC_enviada.[FECHA INICIO], INC_enviada.[FECHA REVISION], INC_enviada.[ACCION EXTERNA A PRODUCCION], INC_enviada.Hora_Act, INC_enviada.INC_Info FROM ((INC_enviada LEFT JOIN Operarios_directos ON INC_enviada.Cod_Operario = Operarios_directos.Nº_op)"
miSQL = miSQL & " LEFT JOIN Causa ON INC_enviada.Nº_Causa = Causa.Causa) LEFT JOIN Estados_INC ON INC_enviada.Revisado_jefe = Estados_INC.Estado WHERE (((INC_enviada.Revisado_jefe) Like 'REV*') AND ((INC_enviada.Detectada_en)=[Formularios]![Entrada]![Detectada_en])) OR (((INC_enviada.Revisado_jefe) Like 'REV*') AND (([Detectada_en] & ' ' & [Linea])=[Formularios]![Entrada]![Union_zona_linea])) OR (((INC_enviada.Revisado_jefe) Like 'REV*') AND ((INC_enviada.Sección)=[Formularios]![Entrada]![Seleccion_linea])) OR (((INC_enviada.Revisado_jefe) Like 'REV*') AND ((INC_enviada.Ver_todas)=[Formularios]![Entrada]![Seleccion_linea])) "

Lo he colocado en el evento del cuadro de texto y funciona sin problemas.

Solucionado pues!

De todas formas, acostúmbrate también a usar la otra forma de dividir en líneas con el _, hace el código más legible y tienes que escribir menos.

Por ejemplo, esta cadena:

miSQL="SELECT TPeso.idusuario, "Peso" AS Medida, TPeso.FPesos AS Fecha, TPeso.Kilos AS Valor FROM TPeso UNION ALL SELECT TTension.idusuario, "Tension" AS Medida, TTension.FTension AS Fecha, TTension.Tension AS Valor FROM TTension;"

la puedes poner como:

MiSQL="SELECT TPeso.idusuario, "Peso" AS Medida, TPeso.FPesos AS Fecha, " _
& "TPeso.Kilos AS Valor FROM TPeso " _
& "UNION ALL SELECT TTension.idusuario, "Tension" AS Medida, " _
& "TTension.FTension AS Fecha, TTension.Tension AS Valor FROM TTension;

que es más legible.

Lo único has de tener cuidad en dejar los espacios necesarios para que no te junte palabras.

PD: No dejes de valorar la respuesta si fue acertada.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas