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.

Preguntas similare

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.
Respuesta Responder a este mensaje
#2 Gustavo Larriera [MVP]
22/10/2004 - 01:30 | Informe spam
Haz lo que dice Maxi (prueba la query directamente en el Query Analizer). Si
funciona correctamente, existe entonces la posibilidad de que sea una
limitación del driver ODBC que está usando la aplicación, prueba hacer una
conexión usando OLEDB.

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"MAXI" wrote in message
news:
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.




Respuesta Responder a este mensaje
#3 Diego
22/10/2004 - 03:15 | Informe spam
Bueno, hice lo sugerido. Probé en el analizador de consultas SQL lo siguiente:

declare @razonsocial char(60)
declare @nomcontacto char(60)
declare @codempresa integer
declare @codlocalidad integer
declare @codinternet integer
declare @codexpo integer

set @razonsocial = '-1'
set @nomcontacto = '-1'
set @codempresa = -1
set @codlocalidad = -1
set @codexpo = 5
set @codinternet = -1

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


Es igual a la consulta de mi pregunta solo que están los parametros
declarados e inicializados. También reemplazé el caracter : por el @.

La respuesta del analizador es OK. Es decir, no indica ningun error y puedo
ejecutar la consulta normalmente devolviendo las filas esperadas.

¿Qué significa esto? ¿Es un problema del controlador ODBC? ¿Debo cambiar por
OLEDB?
En Power uso el caracter : antes del nombre del parámetro y en el analizador
uso @. ¿Existe una forma, en Powerbuilder, de controlar que caracter se usa
para indicar que lo que sigue es un parámetro?
Respuesta Responder a este mensaje
#4 MAXI
22/10/2004 - 03:52 | Informe spam
Sip, yo probaria con Oledb, sino puede hasta ser un problema de Sybase mismo




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:
Bueno, hice lo sugerido. Probé en el analizador de consultas SQL lo
siguiente:

declare @razonsocial char(60)
declare @nomcontacto char(60)
declare @codempresa integer
declare @codlocalidad integer
declare @codinternet integer
declare @codexpo integer

set @razonsocial = '-1'
set @nomcontacto = '-1'
set @codempresa = -1
set @codlocalidad = -1
set @codexpo = 5
set @codinternet = -1

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


Es igual a la consulta de mi pregunta solo que están los parametros
declarados e inicializados. También reemplazé el caracter : por el @.

La respuesta del analizador es OK. Es decir, no indica ningun error y
puedo
ejecutar la consulta normalmente devolviendo las filas esperadas.

¿Qué significa esto? ¿Es un problema del controlador ODBC? ¿Debo cambiar
por
OLEDB?
En Power uso el caracter : antes del nombre del parámetro y en el
analizador
uso @. ¿Existe una forma, en Powerbuilder, de controlar que caracter se
usa
para indicar que lo que sigue es un parámetro?
Respuesta Responder a este mensaje
#5 Gustavo Larriera [MVP]
22/10/2004 - 14:42 | Informe spam
El mensaje que recibias era un posible error de sintaxis, pero la query no
tiene problema de sintaxis pues la ejecutas correctamente en el Query
Analyzer.

select error: SQLSTATE = 37000
[Microsoft][ODBC SQL Server Driver]Error de sintaxis o infraccion de acceso

Por lo tanto la sospecha de que es el driver ODBC que usas quien no está
soportando la sintaxis, es altamente probable. Deberias usar un driver
OLEDB.

Powerbuilder no lo he usado jamás, pero asumo que el uso de los dos puntos
(:) es para marcar la presencia de variables o parametros locales de la
aplicación. No debería venir por allí el problema.

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Diego" wrote in message
news:
Bueno, hice lo sugerido. Probé en el analizador de consultas SQL lo
siguiente:

declare @razonsocial char(60)
declare @nomcontacto char(60)
declare @codempresa integer
declare @codlocalidad integer
declare @codinternet integer
declare @codexpo integer

set @razonsocial = '-1'
set @nomcontacto = '-1'
set @codempresa = -1
set @codlocalidad = -1
set @codexpo = 5
set @codinternet = -1

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


Es igual a la consulta de mi pregunta solo que están los parametros
declarados e inicializados. También reemplazé el caracter : por el @.

La respuesta del analizador es OK. Es decir, no indica ningun error y
puedo
ejecutar la consulta normalmente devolviendo las filas esperadas.

¿Qué significa esto? ¿Es un problema del controlador ODBC? ¿Debo cambiar
por
OLEDB?
En Power uso el caracter : antes del nombre del parámetro y en el
analizador
uso @. ¿Existe una forma, en Powerbuilder, de controlar que caracter se
usa
para indicar que lo que sigue es un parámetro?
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida