Error de SQL al pasar parámetro vacío V8, posible Bug

En la versi?n 7 de scriptcase funcionaba perfecto llamar a un form como apicaci?n desde un grid pasando vac?o el par?metro de alg?n campo en especial de las llaves primarias, al pasar el proyecto a la V8 da error cuando intenta entrar en el form ya que el par?metro lo construye en el SQL con el nombre del campo el signo igual y nada posteriormente. Adicionalmente en la sentencia SQL que construye duplica las condiciones

Como ejemplo una grid de clientes que al enlazarlo con un form muestra los movimientos de dicho cliente y ah? se pod?a actualizar, ahora en la V8 da error al entrar en el form por pasar vac?o el campo de identificaci?n del movimiento.

Ya no me es posible regresar a la V7 porque ya realic? instalaciones de proyectos en la V8.

Gracias

En todo caso seria un bug de v7. Si tienes una condicion en tu consulta,que comportamiento quieres si no le das valor?yo lo veo normal asi

Puede ser como tu dices, pero la funcionalidad en V7 tiene mucha utilidad, de hecho m?s de la mitad de los formularios que desarrollo tienen dicha funcionalidad. Coloco imagen del funcionamiento en V7 y el error que da en V8, ya sea convirtiendo desde la V7 o desarroll?ndolo directamente en V8. As? que todos los proyectos que he importado est?n dando el mismo error, por ello considero que es un bug de la v8, que debe estar colocando el campo de clave aunque se le indique vac?o en el par?metro que env?a el Grid, seg?n he podido observar y adem?s se ve que duplica la condici?n.

Como ya lo hac?a en la V7 y he intentado hacerlo de otras formas antes de solicitar ayuda, quiz? habr? forma de hacer lo mismo.

agradeciendo cualquier ayuda,
saludos,

Roger

V7.jpg

V8.jpg

Como te comento en el hilo de bugs no considero que esto sea un bug. Si tu espec?ficas a prop?sito un where en tu aplicaci?n, es para que lo use, no para que lo ignore. En todo caso, antes si era un bug, y ahora esta arreglado.

Lo normal, es controlar este comportamiento por programaci?n, y hacerlo al rev?s, si te llega el par?metro, aplicar un where en tu cl?usula usando macros.

Si vi tu respuesta en el hilo de bug, en el cual considero que si hay un error de construcci?n de la sentencia sql en la V8, porque duplica la condici?n where. de todas formas creo que los desarrolladores de SC evaluar?n si es una condici?n de error o as? lo han dejado.

Con lo que me comentas sobre manejarlo con programaci?n, el problema es que si env?a desde el Grid el par?metro del autonim?rico, no se podr? hacer ninguna otra consulta del lado del Form, ya que ser?a de colocar todos los movimientos en el gr?s y en el enlace con la aplicaci?n form, modificar un solo registro a la vez puesto que el autonum?rico es uno.

Lo que necesito es en el Grid tener en el caso del ejemplo los clientes y al enlazar con el form, me presente todos los movimientos de dicho cliente y as? en otros casos de la misma forma tener un Grid de agrupaci?n y en el Form el detalle correspondiente, pero no uno por uno.

Te agradecer?a si te fuese posible explicarme como tu dices por programaci?n, como te expongo al llamar el Form, solo se traer?a un registro y no todos los del detalle, pero no se si una macro como me comentas prod?a hacer eso desde el enlace del Grid o de cualquier otra forma, quiz? con redir y par?metros, pero ser? salir del esquema que propone SC.

Gracias por tu atenci?n y correspondencia

Al no obtener ninguna respuesta positiva y como tengo varios proyectos que necesito y que en V7 funcionaban perfecto y en V8 dan error, opt? por buscar alguna alternativa para hacerlo funcionar. Mientras decide SC si es Bug o es “mejora”, ya que a problemas desesperados, soluciones desesperadas, si alguien tiene este inconveniente realizar lo siguiente :

cuando se presente el error que env?a el sql del form, ubicar la linea del programa _apl.php y en algunas lineas arriba encontrar?n la variable $sc_where As?:

  if ((isset($this->NM_ajax_opcao) && 'backup_line' == $this->NM_ajax_opcao) || (isset($this->NM_btn_navega) && 'N' == $this->NM_btn_navega))
  {
      if ('' == $sc_where)
      {
          $sc_where = " where (";
      }
      else
      {
          $sc_where .= " and (";
      }
      $sc_where .= "customer = " . $this->customer_;
      $sc_where .= " and ";
      $sc_where .= "id_produccion = " . $this->id_produccion_;
      $sc_where .= ")";
  }

En mi caso solamente comentarie el and y el campo que se refiere a la clave primaria

//$sc_where .= " and ";
//$sc_where .= "id_produccion = " . $this->id_produccion_;

Ya que como se puede observar, est? duplicando la condici?n del where, indistintamente sea Bug o no, si es error en la construcci?n del sql que me imagino tendr?n que corregir, pero le dej? la duplicaci?n intacta, como lo expongo solo le comento el campo correspondiente a la llave primaria. Pueden comprobar la duplicaci?n en el modo de debug y ver?n el where duplicado en sus aplicaciones, ya que en todas las aplicaciones lo est? generando de dicha forma.

Lo he probado y funciona perfecto tambi?n actualiza adecuadamente como lo hac?a en la V7, el inconveniente es que cada vez que se genere el form habr? que modificarlo nuevamente.

Bueno, queda en suspenso como semi solved, hasta obtener una respuesta t?cnica.

Gracias por su ayuda e inter?s,
saludos,

Roger

Gracias por compartirlo Roger, efectivamente no es un workaround adecuado ya que requiere de modificaci?n por cada generaci?n, pero al menos soluciona tu problema.

Intentar? retomar este hilo luego, voy bastante liado estos d?as, y darte una segunda opci?n a ver si te funciona.

Saludos.

Gracia Gio por estar pendiente, cualquier ayuda ser? muy agradecida. Envi? un Ticket al soporte trial, con una actualizaci?n de sc8 nueva que baje en otra m?quina a ver si obtengo alguna respuesta.

Saludos,

Roger

Tengo un problema muy similar al tuyo, en mi caso tengo una tabla simple, en MySql, s?lo un id auto num?rico y dos campos de texto. Hago que scriptcase genere las aplicaciones por lote de mi tabla y autom?ticamente me genera el grid y el form para actualizar mi tabla y los enlaza por aplicaci?n autom?ticamente tambi?n. El problema aparece cuando entro al grid y clickeo el bot?n de nuevo registro, en ese momento el SC manda el error de SQL que posteste. Incorrect syntaxis near ‘)’

Yo considero que si es un bug ya que como ven no he tocado ni una sola opci?n del SC y todo es auto generado.

[QUOTE=fcarmonah;26827]Tengo un problema muy similar al tuyo, en mi caso tengo una tabla simple, en MySql, s?lo un id auto num?rico y dos campos de texto. Hago que scriptcase genere las aplicaciones por lote de mi tabla y autom?ticamente me genera el grid y el form para actualizar mi tabla y los enlaza por aplicaci?n autom?ticamente tambi?n. El problema aparece cuando entro al grid y clickeo el bot?n de nuevo registro, en ese momento el SC manda el error de SQL que posteste. Incorrect syntaxis near ‘)’

Yo considero que si es un bug ya que como ven no he tocado ni una sola opci?n del SC y todo es auto generado.[/QUOTE]

Puedes compartir el SQL de tu form?

A cual te refieres? Lo ?nico que obtengo de Scriptcase es lo siguiente:

error1.jpg

Pero si le das a View SQL te mostrar? el SQL generado.

no, de hecho no es un hiperv?nculo, solo un texto subrayado en negro y no me permite abrir ninguna ventana con el sql como normalmente deber?a ser.

Si, eso pasa que no te deja ver los SQl aunque ah? tiene un v?nculo para tal prop?sito. Puedes activar en Aplicaciones opci?n debug para que te muestre las sentencias SQL

aqui te dejo el codigo que me arroja el modo debug.

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘)’ at line 1
ADOConnection._Execute(SELECT count() from lugares where (lugar_id = ), false) % line 1085, file: adodb.inc.php
ADOConnection.Execute(SELECT count(
) from lugares where (lugar_id = )) % line 3193, file: form_lugares_apl.php
form_lugares_apl.nm_select_banco() % line 1149, file: form_lugares_apl.php
form_lugares_apl.controle() % line 1514, file: index.php

Hola, a mi tambi?n me aparece el mismo error, y yo sostengo que s? es error de scriptcase versi?n 8, el query que se genera est? mal formado, en mi caso es:

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘)’ at line 1
ADOConnection._Execute(SELECT count() from ipd_sesiones where pacienteid = 1 and (sesionid = ), false) % line 1085, file: adodb.inc.php
ADOConnection.Execute(SELECT count(
) from ipd_sesiones where pacienteid = 1 and (sesionid = )) % line 4481, file: form_expedientes_sesiones_apl.php
form_expedientes_sesiones_apl.nm_select_banco() % line 1314, file: form_expedientes_sesiones_apl.php
form_expedientes_sesiones_apl.controle() % line 1649, file: index.php

En este caso, el sesionid es un autoincremental en la base de datos, es llave primaria, pero entonces al crear el enlace de tipo aplicaci?n, le digo que ese campo lo pase vac?o, pues la base lo generar?, pero al revisar el query que se genera autom?ticamente por scriptcase, aparece la condicion “sesionid=” sin nada de valor y luego inicia con otra condici?n “clienteid=1” pero eso es lo que hace fallar el query, est? mal formado

?qu? procede en este caso?

gracias

Tambi?n he detectado que en cualquier construcci?n que se realice de sentencia sql, cuando el valor es cero (0), por ejemplo valor = 0, cuando construye el sql : SELECT * from tabla where gasto = valor, lo deja : SELECT * from tabla where gasto =
por lo cual da el error. Como le he solventado momentaneamente es que coloco un if para cuando es 0 y el else para cuando no es 0, as?:

if ({valor} == 0)
{
$sql = “select * from tabla where gasto = 0”
.
.
.
}
else
{
$sql = “select * from tabla where gasto = {valor}”
.
.
.

}

Es molesto porque deber?a de colocar el cero, pero para mientras puede servir como soluci?n

Saludos.

[QUOTE=Roberto Azrael;27319]Hola, a mi tambi?n me aparece el mismo error, y yo sostengo que s? es error de scriptcase versi?n 8, el query que se genera est? mal formado, en mi caso es:

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘)’ at line 1
ADOConnection._Execute(SELECT count() from ipd_sesiones where pacienteid = 1 and (sesionid = ), false) % line 1085, file: adodb.inc.php
ADOConnection.Execute(SELECT count(
) from ipd_sesiones where pacienteid = 1 and (sesionid = )) % line 4481, file: form_expedientes_sesiones_apl.php
form_expedientes_sesiones_apl.nm_select_banco() % line 1314, file: form_expedientes_sesiones_apl.php
form_expedientes_sesiones_apl.controle() % line 1649, file: index.php

En este caso, el sesionid es un autoincremental en la base de datos, es llave primaria, pero entonces al crear el enlace de tipo aplicaci?n, le digo que ese campo lo pase vac?o, pues la base lo generar?, pero al revisar el query que se genera autom?ticamente por scriptcase, aparece la condicion “sesionid=” sin nada de valor y luego inicia con otra condici?n “clienteid=1” pero eso es lo que hace fallar el query, est? mal formado

?qu? procede en este caso?

gracias[/QUOTE]

Hola, creo que en este caso, no deber?as pasar en vac?o el enlace, puedes seleccionar campo y colocarle el nombre que el har? lo dem?s y no te dar? el error de sql.

Saludos

Yo tengo este error tambi?n. Prob? lo que dice rogerrod61 pero nada, mas soluciones posibles?

[QUOTE=rogerrod61;27323]Hola, creo que en este caso, no deber?as pasar en vac?o el enlace, puedes seleccionar campo y colocarle el nombre que el har? lo dem?s y no te dar? el error de sql.

Saludos[/QUOTE]

Gracias por contestar, pero a?n considero que es un bug de scriptcase, porque en la versi?n 7 hac?a lo mismo y ah? no hab?a problema, y ah? en la versi?n 7 s? lo pasaba vac?o.

?porqu? les cuesta tanto trabajo creer que tiene errores? as? de simple, la misma aplicaci?n compila y se ejecuta en sc7 y sin problemas, la isma aplicaci?n, sin hacer ning?n cambio, y compila, pero falla (la falla que estamos reportando) a la hora de ejecutarse.

Pero ahora leyendo este caso, la pregunta que quiz? puedan contestar y por ah? intentar solucionarlo es… tengo una form de multiples registros, con id autonumerico, pero tambien tengo otros campos, entre ellos, un campo clienteid (este no es llave) y cuando defino en el sql de la forma que clienteid=[global_clienteid] y ejecuta la forma esde el ambiente de sc, me pide el par?metro cliente_id antes de correr y al ejecutarse me presenta los registros de ese cliente que haya definido en el par?metro, y cuando genero un grid de clientes, del que quiero crear el enlace para abrir la forma de varios registros relacionados con ese cliente, el enlace me dice que necesita dos par?metros, el cliente_id, que yo veo al ejecutar aquella forma, pero adem?s me pide el id autonum?rico llave de los registros de esa tabla, por eso es que en sc7 lo deje vac?o y no hab?a problema, pero ahora en sc8 lo dejo vacio y marca error el sql, se podr?a solucionar esto si sc no pidiera como par?metro el id que no quiero pasar porque es autonum?rico.

?qu? se puede hacer?

para solucionar mientras esto, desde sc8, fue que elimin? el enlace creado en la interface de sc8, y lo cree de manera manual al cargar la forma, en un evento, con la macro: sc_link(Column, Application, Parameters, “Hint”, “Target”, Height, Width)

gracias