Estoy trabajando en una consulta SQL de una datawindow TABULAR de Sybase
Powerbuilder Enterprise 8.0 built 6028
La consulta recupera información de una tabla de una base de datos de MS SQL
Server 2000.
Originalmente la consulta era:
SELECT empresas.codempresa,
empresas.razonsocial,
empresas.nomcontacto,
empresas.codlocalidad
FROM empresas
WHERE ( empresas.razonsocial LIKE (:razonsocial + '%') OR :razonsocial =
'-1') AND
( empresas.nomcontacto LIKE (:nomcontacto + '%') OR :nomcontacto =
'-1') AND
( empresas.codlocalidad = :codlocalidad OR :codlocalidad = -1) AND
( empresas.codempresa = :codempresa OR :codempresa = -1)
ORDER BY empresas.codempresa ASC
donde 'razonsocial','nomcontacto','codlocalidad','codempresa' son parámetros
(retrieval arguments) que se pasan a la datawindow en tiempo de ejecución de
la aplicación.
Asi como está, la consulta funciona correctamente recuperando los resultados
esperados. Sin embargo cuando agrego dos parámetros (retrieval arguments)
más: 'codinternet','codexpo' y modifico la consulta anterior a la siguiente:
SELECT empresas.codempresa,
empresas.razonsocial,
empresas.nomcontacto,
empresas.codlocalidad
FROM empresas
WHERE ( empresas.razonsocial LIKE (:razonsocial + '%') OR :razonsocial =
'-1') AND
( empresas.nomcontacto LIKE (:nomcontacto + '%') OR :nomcontacto =
'-1') AND
( empresas.codlocalidad = :codlocalidad OR :codlocalidad = -1) AND
( empresas.codempresa = :codempresa OR :codempresa = -1) AND
( empresas.codempresa IN ( SELECT preacreditacion.codempresa FROM
preacreditacion WHERE preacreditacion.codtramite = :codinternet AND
preacreditacion.codexposicion = :codexpo) OR :codinternet = -1 )
ORDER BY empresas.codempresa ASC
donde, como se ve, agrego una condición nueva a la cláusula WHERE donde se
incorpora una subconsulta y se usa, en esta, los dos nuevo parámetros.
Una vez que realicé la modificación, hago 'click' en el botón RETURN y
vuelvo sin problemas al pintor Datawindow. Lugo hago click en el botón
RETRIEVE y aparece la ventana 'SPECIFY RETRIEVAL ARGUMENTS'. Ingreso los
valores correspondientes y hago click en 'OK'. Es entonces cuando aparece el
siguiente mensaje de error:
select error: SQLSTATE = 37000
[Microsoft][ODBC SQL Server Driver]Error de sintaxis o infraccion de acceso
y la consulta no se ejecuta. ¿Alguien puede decirme que está pasando? ¿Qué
es lo que está mal?
Evidentemente, esta relacionado con la subconsulta después de 'IN' que estoy
incorporando ya que si la elimino funciona correctamente. También funciona
correctamente si elimino los parámetros y los reemplazo por valores.
Todo lo que se refiere a tipo de datos, está verificado.
Si aplico esta última consulta sobre una base de datos de Sybase Adaptive
Server Anywhere 7.0 funciona correctamente. El problema surge al cambiar por
MS SQL Server 2000.
Gracias por cualquier ayuda, sugerencia o pista.
Leer las respuestas