anonymous Log in
Search
Recents:
v3.0
gx-l
Problemas con objeto Query (A character, token, or clause is not valid or is missing)
23/01/20 19:45

The Jocker

Replies: 11

Buenas gente, espero estén bien
Estoy utilizando el objeto Query de Genexus , y me encuentro con el
siguiente error al ejecutar la pantalla que contiene a mi objeto query
[image: image.png]
La traza completa del error es la siguiente:
Error: com.ibm.as400.access.AS400JDBCSQLSyntaxErrorException: A character,
token, or clause is not valid or is missing. at
com.ibm.as400.access.JDError.createSQLExceptionSubClass(JDError.java:891)
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:418) at
com.ibm.as400.access.JDError.throwSQLException(JDError.java:395) at
com.ibm.as400.access.JDEscapeClause.convert(JDEscapeClause.java:323) at
com.ibm.as400.access.JDEscapeClause.parse(JDEscapeClause.java:193) at
com.ibm.as400.access.JDEscapeClause.parse(JDEscapeClause.java:178) at
com.ibm.as400.access.JDEscapeClause.parse(JDEscapeClause.java:133) at
com.ibm.as400.access.JDSQLStatement.<init>(JDSQLStatement.java:443) at
com.ibm.as400.access.AS400JDBCConnection.prepareStatement(AS400JDBCConnection.java:2202)
at
com.ibm.as400.access.AS400JDBCConnection.prepareStatement(AS400JDBCConnection.java:2005)
at sun.reflect.GeneratedMethodAccessor95.invoke(Unknown Source) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at
java.lang.reflect.Method.invoke(Unknown Source) at
org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:126)
at
org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:108)
at
org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor.invoke(AbstractCreateStatementInterceptor.java:75)
at
org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:108)
at
org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:81)
at com.sun.proxy.$Proxy101.prepareStatement(Unknown Source) at
com.genexus.db.driver.GXConnection.prepareStatement(GXConnection.java:987)
at
com.genexus.db.driver.GXConnection.prepareStatement(GXConnection.java:977)
at
com.genexus.db.driver.DirectPreparedStatement.createStatement(DirectPreparedStatement.java:70)
at
com.genexus.db.driver.DirectPreparedStatement.getStatement(DirectPreparedStatement.java:84)
at com.genexus.db.driver.GXConnection.getStatement(GXConnection.java:906)
at com.genexus.db.driver.GXConnection.getStatement(GXConnection.java:918)
at
com.genexus.db.SentenceProvider.getPreparedStatement(SentenceProvider.java:16)
at com.genexus.db.ForEachCursor.preExecute(ForEachCursor.java:162) at
com.genexus.db.DataStoreProvider.execute(DataStoreProvider.java:226) at
com.genexus.db.DataStoreProvider.execute(DataStoreProvider.java:197) at
qviewer.services.gxpl_DBAccess.ExecuteSQL(gxpl_DBAccess.java:93) at
qviewer.services.gxpl_DBAccess.ExecuteSQL(gxpl_DBAccess.java:221) at
qviewer.services.Sdtgxpl_DBAccess.executesql(Sdtgxpl_DBAccess.java:65) at
qviewer.services.data.recordset.gxpl_getrecordsetquery.privateExecute(gxpl_getrecordsetquery.java:101)
at
qviewer.services.data.recordset.gxpl_getrecordsetquery.execute_int(gxpl_getrecordsetquery.java:75)
at
qviewer.services.data.recordset.gxpl_getrecordsetquery.execute(gxpl_getrecordsetquery.java:55)
at
qviewer.services.data.recordset.gxpl_getrecordset.privateExecute(gxpl_getrecordset.java:166)
at
qviewer.services.data.recordset.gxpl_getrecordset.execute_int(gxpl_getrecordset.java:112)
at
qviewer.services.data.recordset.gxpl_getrecordset.execute(gxpl_getrecordset.java:77)
at
qviewer.services.gxpl_getrecordsetpagedata.privateExecute(gxpl_getrecordsetpagedata.java:179)
at
qviewer.services.gxpl_getrecordsetpagedata.execute_int(gxpl_getrecordsetpagedata.java:162)
at
qviewer.services.gxpl_getrecordsetpagedata.execute(gxpl_getrecordsetpagedata.java:107)
at
qviewer.services.gxpl_getpagedatafortable_logic.privateExecute(gxpl_getpagedatafortable_logic.java:105)
at
qviewer.services.gxpl_getpagedatafortable_logic.execute_int(gxpl_getpagedatafortable_logic.java:83)
at
qviewer.services.gxpl_getpagedatafortable_logic.execute(gxpl_getpagedatafortable_logic.java:60)
at
qviewer.services.gxpl_getpagedatafortable.privateExecute(gxpl_getpagedatafortable.java:71)
at
qviewer.services.gxpl_getpagedatafortable.execute_int(gxpl_getpagedatafortable.java:52)
at
qviewer.services.gxpl_getpagedatafortable.execute(gxpl_getpagedatafortable.java:35)
at qviewer.services.gxpl_get_main.privateExecute(gxpl_get_main.java:88) at
qviewer.services.gxpl_get_main.execute_int(gxpl_get_main.java:52) at
qviewer.services.gxpl_get_main.execute(gxpl_get_main.java:35) at
qviewer.services.agxpl_get_impl.privateExecute(agxpl_get_impl.java:53) at
qviewer.services.agxpl_get_impl.webExecute(agxpl_get_impl.java:43) at
com.genexus.webpanels.GXWebObjectBase.doExecute(GXWebObjectBase.java:269)
at qviewer.services.agxpl_get.doExecute(agxpl_get.java:22) at
com.genexus.webpanels.GXWebObjectStub.callDoExecute(GXWebObjectStub.java:242)
at
com.genexus.webpanels.GXWebObjectStub.callExecute(GXWebObjectStub.java:130)
at com.genexus.webpanels.GXWebObjectStub.doPost(GXWebObjectStub.java:45) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:660) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.genexus.filters.ExpiresFilter.doFilter(ExpiresFilter.java:1240) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at psiprobe.Tomcat90AgentValve.invoke(Tomcat90AgentValve.java:35) at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
at
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Plataforma: Gx15U12, DB2 for iSeries, Java 8, Tomcat 9.
Alguna idea de como tratar el error, o si alguien tiene noción del mismo,
sería fabuloso.
Todo aporte es bienvenido!
Gracias!
Saludos!
Replies

gmartinez

23/01/20 19:54
Hola Gustavo. El error está dando al ejecutar la sentencia SQL asociada al objeto Query. Lo primero es revisar si la sentencia está bien formada. Para eso puedes fijarte en la pestaña SQLStatement en el objeto query. Saludos. Gustavo Martínez GeneXus. El jue., 23 ene. 2020 a las 16:46, Gustavo A. Centurión R. (< acr.net1@gmail.com>)

The Jocker

23/01/20 20:19
Hola Gustavo , gracias por responder Te cuento que la sentencia es bastante sencilla por cierto, mira velo. Te cuento además que importando el WP junto a su query en otra publicación, si funciona!, pero en está en particular tira ese mensaje al ejecutarse la pantalla. [image: image.png] [image: image.png] Saludos! El jue., 23 de ene. de 2020 a la(s) 16:55, Gustavo Martínez ( gmartinez@genexus.com)

gmartinez

23/01/20 20:35
Importando en otra Knowledge Base te refieres? Si es así probablemente tengas diferencias en la configuración del datastore entre ambas Knowledge Bases. Puede ser? Saludos. Gustavo Martínez GeneXus. El jue., 23 ene. 2020 a las 17:20, Gustavo A. Centurión R. (< acr.net1@gmail.com>)

The Jocker

23/01/20 21:53
Asi mismo Gustavo, importando en otra KB, el punto es que he usado el client generado de esa misma KB en mi publicación , pero de igual manera persiste el error Pareciera que me faltase alguna otra configuración mas , no crees? De ahí a que pueda ser, es la cuestión Saludos! El jue., 23 de ene. de 2020 a la(s) 17:35, Gustavo Martínez ( gmartinez@genexus.com)

gmartinez

24/01/20 13:32
Por lo que dices entonces es un problema que se reproduce solo en esa KB. Fíjate las diferencias de configuración a nivel de Environment y Generador. En principio no parecería tener nada que ver con la generación de las sentencias del objeto Query pero mejor descartar eso (y quizá te pueda dar una pista). Revisa también las diferencias en el client.cfg en ambas KB, a ver si puedes detectar alguna diferencia relevante. Por último. si todo falla puedes borrar el directorio web de tu modelo y hacer un Rebuild All en la KB donde tienes el problema. Saludos. Gustavo Martínez GeneXus. El jue., 23 ene. 2020 a las 18:54, Gustavo A. Centurión R. (< acr.net1@gmail.com>)

The Jocker

24/01/20 16:55
Gustavo , gracias por tu respuesta nuevamente Es probable que sea tal vez eso que mencionas , que exista las diferencias a nivel de Enviroment y Generador. He utilizado el client.cfg en mi webapp , del equipo donde funciona, pero no dio resultado, por ese lado descarte lo del client. Aunque siempre me estoy manejando a través de conjeturas ya que el mensaje del error no pareciera proporcionar mucha información, además de ser muy genérico. Lo del RebuildAll es una buena idea, pero no podemos contarlo como una alternativa puesto que la KB cuenta con unos 10.000 objetos prácticamente. Además en caso de atinarle y llegar a que funcione, no llegariamos a identificar la causa exacta, el cual es lo que estamos buscando ahora mismo en el equipo. Saludos! El vie., 24 de ene. de 2020 a la(s) 10:33, Gustavo Martínez ( gmartinez@genexus.com)

jdeinnoc

24/01/20 17:48
Hola Gustavo, El problema parece ser de sintaxis de SQL por lo que dice el mensaje. Yo lo que haría es revisar el .java que generó GX de acuerdo al objeto query y ver exactamente cuál es la sentencia que está dando error probándola directamente sobre la base de datos. Suerte con eso. Saludos, Javier de Innocenti.

The Jocker

24/01/20 18:13
Hola Javier , Lo que GX creo en el SQL Statement funciona a la perfección probando en un cliente de DB. Además de que importar los objetos en otra KB y generarlo también da resultados positivos , osea funciona en la publicación del mismo. Saludos! El vie., 24 de ene. de 2020 a la(s) 14:49, Javier de Innocenti ( jpdeinnocenti@tesinsoftware.com)

The Jocker

29/01/20 20:19
*SOLUCIÓN* Buenas gente, le he atinado a la solución con los siguientes pasos: Al principio realicé el RebuildAll en una KB con mas de 10.000 objetos , aunque resulto con un RebuildAll Failed, realice un *deploy *de mi objeto main para crear un nuevo *war *, el cual una vez completado *deploye *en mi servidor, y si llego a funcionar todo los objetos Query con el nuevo war. Ahora bien, teníamos que saber cual era la diferencia entre el *war *generado que si funciona y el *war *en el que no funciona los objetos Query. Con una herramienta como *total commander* busqué ficheros diferentes en ambos directorios, en el escaneo salto el siguiente resultado que llamo mucho mi atención y que está relacionado a querys, que en el directorio: *webbapp\WEB-INF\private\ * salto diferencias entre ambas publicaciones, en el mismo directorio se ve lo siguiente: [image: image.png] Pase al principio todos los archivos generados del *webapp* que funciona al *webapp *que no funcionaba, después probe, y resulto exitoso las pruebas, ya no me aparecía el error reportado y ya funcionaba las pantallas con objeto *Query*. En definitiva para atinarle a la causa exacta, repliqué nuevamente el error y empece a pisar de a uno los archivos, el resultado tiro que, cuando llegaba a pisar el archivo *QueryViewerQueries.xml , *empezaba a funcionar las pantallas con objeto Query, en definitiva el archivo mencionado es el que se utilizó para solucionar el problema. La pregunta ahora es, qué contiene el archivo *QueryViewerQueries.xml ? *y por qué el archivo generado en el *deploy *si llego a funcionar? La otra cuestión es que debo poner en solo lectura dicho archivo puesto que al compilar un WP con objeto query, vuelve a generar nuevamente el archivo y el archivo generado al compilar un objeto de la KB no me funciona. Gustavo Martinez, si tenes alguna respuesta a esto, sería fabuloso. Y si nos brindas mayor información sobre este archivo generado. Saludos!!! El vie., 24 de ene. de 2020 a la(s) 15:13, Gustavo A. Centurión R. ( acr.net1@gmail.com)

gmartinez

29/01/20 20:38
Hola. Fantástico que hayas encontrado la causa. El archivo QueryViewerQueries.xml del directorio private contiene la estructura y sentencia SQL de cada una de las consultas. Pásame a mi dirección personal directamente los dos archivos QueryViewerQueries.xml (el que hace que todo funcione y el que hace que no) y me fijo en las diferencias. Saludos. Gustavo Martínez GeneXus. El mié., 29 ene. 2020 a las 17:20, Gustavo A. Centurión R. (< acr.net1@gmail.com>)

The Jocker

29/01/20 20:41
Dale Gustavo, te paso los archivos. Saludos! El mié., 29 de ene. de 2020 a la(s) 17:38, Gustavo Martínez ( gmartinez@genexus.com)


Back to gx-l