Ayuda con MS Sql Server

21/10/2004 - 22:11 por Diego | Informe spam
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

#1 MAXI
22/10/2004 - 00:02 | Informe spam
mm, eso es un problema del Dataview, porque no cambiamos las cosas y
escribis esa misma query para SQL y la probas desde el Query analizer?




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"Diego" escribió en el mensaje
news:
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.

Preguntas similares