Limitacion de fox para ejecutar comandos SQL en tiempo de ejecucion

06/04/2005 - 12:19 por Jordisku | Informe spam
Hola grupo!!

Mi problema es el siguiente. Para realizar las inserciones y actualizaciones
en la base de datos, tengo un procedimiento en la capa de datos que monta la
cadena a ejecutar, sea un insert o un update o un select y la ejecuta asi:

&lcEjecutar

El problema me viene cuando en la tabla tengo un campo Memo, cuyo contenido
supera los 255 caracteres, el sistema me devuelve un error 36, "El comando
contiene una frase o palabra clave no reconocida.", supongo que se debe
estar superando algun limite interno de foxpro.

¿Alguien sabe como saltarse este limite o como realizar esta funcion de otra
forma que me permita ejecutar literales grandes?

Gracias de antemano. :))

salu2.

Jordi

Preguntas similare

Leer las respuestas

#1 Esparta Palma
06/04/2005 - 16:58 | Informe spam
ExecScript para código en tiempo de ejecución (RUNTIME)
http://www.panoramabox.com/GoPub.aspx?IdObjƒ8

Espero te sirva.

ž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º

Espartaco Palma Martínez
SysOp http://www.PortalFox.com
México D.F.
MoBlogs!
http://weblogs.golemproject.com/esparta/
http://www.espartha.com/blog/

Jordisku wrote:
Hola grupo!!

Mi problema es el siguiente. Para realizar las inserciones y actualizaciones
en la base de datos, tengo un procedimiento en la capa de datos que monta la
cadena a ejecutar, sea un insert o un update o un select y la ejecuta asi:

&lcEjecutar

El problema me viene cuando en la tabla tengo un campo Memo, cuyo contenido
supera los 255 caracteres, el sistema me devuelve un error 36, "El comando
contiene una frase o palabra clave no reconocida.", supongo que se debe
estar superando algun limite interno de foxpro.

¿Alguien sabe como saltarse este limite o como realizar esta funcion de otra
forma que me permita ejecutar literales grandes?

Gracias de antemano. :))

salu2.

Jordi


Respuesta Responder a este mensaje
#2 Jordisku
06/04/2005 - 20:37 | Informe spam
De nuevo, muchas gracias Esparta, he conseguido aumentar un poco la
capacidad, pero sigo teniendo problemas y ahora creo que es foxpro el que me
limita.

Me explico, el problema viene porque en la tabla que actualizo hay un campo
memo que necesita bastante capacidad de espacio, cuando llega un momento de
escritura al ejecutar el update recibo el mensaje de error:
La expresión SQL es demasiado compleja (Error 1845)
Esto se produce porque foxpro se queda sin memoria al expandir el comando
para ejecutarlo. Sabrias por favor de algo que pueda hacer para aumentar
esta memoria, o como darle un giro al tema. Necesito que en ese campo memo
se pueda escribir mucho texto (al menos 2000 o 3000 caracteres), pues son
informes de visitas y 300 o 400 que me permite ahora se me queda muy corto.

Gracias de antemano.

salu2. ;))

Jordi
Respuesta Responder a este mensaje
#3 Esparta Palma
06/04/2005 - 20:42 | Informe spam
Si que es raro, por favor muestranos el codigo que te manda el error.

Jordisku wrote:
De nuevo, muchas gracias Esparta, he conseguido aumentar un poco la
capacidad, pero sigo teniendo problemas y ahora creo que es foxpro el que me
limita.

Me explico, el problema viene porque en la tabla que actualizo hay un campo
memo que necesita bastante capacidad de espacio, cuando llega un momento de
escritura al ejecutar el update recibo el mensaje de error:
La expresión SQL es demasiado compleja (Error 1845)
Esto se produce porque foxpro se queda sin memoria al expandir el comando
para ejecutarlo. Sabrias por favor de algo que pueda hacer para aumentar
esta memoria, o como darle un giro al tema. Necesito que en ese campo memo
se pueda escribir mucho texto (al menos 2000 o 3000 caracteres), pues son
informes de visitas y 300 o 400 que me permite ahora se me queda muy corto.

Gracias de antemano.

salu2. ;))

Jordi





ž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º

Espartaco Palma Martínez
SysOp http://www.PortalFox.com
México D.F.
MoBlogs!
http://weblogs.golemproject.com/esparta/
http://www.espartha.com/blog/
Respuesta Responder a este mensaje
#4 Esparta Palma
09/04/2005 - 02:55 | Informe spam
Revisa si esto te sirve:

You receive the "SQL expression too complex" error message if the IN
clause includes more than 25 values in FoxPro
http://support.microsoft.com/defaul...-US;103031

Aunque lo que veo es que no tienes ninguna cláusula IN en tu query :-(


ž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º

Espartaco Palma Martínez
SysOp http://www.PortalFox.com
México D.F.
MoBlogs!
http://weblogs.golemproject.com/esparta/ <- Tech
http://www.espartha.com/blog/ <- Personal

Jordisku wrote:
Hola Esparta, aqui va el codigo:
do case
case this.BizToServer = "FOX"
lcError = on( "ERROR" )
on error lnError = -1

*!* Si se trata de una consulta, agregarle el cursor de salida.
if not this.Vacio( tcCursor ) and left( lower( lcEjecutar ), 4 )
== "sele"
lcEjecutar = lcEjecutar + " into cursor " + tcCursor
endif

*!* Forzar que el cursor sea de lectura-escritura para poder actualizar
*!* los campos con formato de DATETIME
if ( left( lower( lcEjecutar ), 4 ) == "sele" ) and ( not "read"
$ lcEjecutar )
lcEjecutar = lcEjecutar + " readwrite"
endif

*!* Ejecuta la instruccion SQL.
this.Guardar_log( "BizWrapper/Ejecutar - FOX - Ejecuta la
instruccion SQL." )
* &lcEjecutar && Asi lo tenia antes
* EXECSCRIPT(lcEjecutar)*
Si lcEjecutar viene con la siguiente cadena, genera el error 1845:

update visitas set idvisita = 6, idorga = 2, idempre = 9767, fecha =
ctot( '16-12-2004 00:00:00' ) , *obser = 'Se les deja calendario laboral
2005 y nos dicen que son solo 3 trabajadores.' + chr(13) +
'fasdfasdfasdfdasf' + chr(13) + 'adsfasdfasdfasdfasdfasdf' + chr(13) +
'asdfasdfasdfasdfasdfasdf' + chr(13) + 'asdfasdfasdfasdf' + chr(13) +
'asdfasdfasdfffgghhhhjjjj' + chr(13) + 'aasdfsadfasdfsadfsadfkkkkkkkk' +
chr(13) + 'asdfasdfasdfasdf' + chr(13) + 'asdfasdf' + chr(13) +
'adsfasdfasdf' + chr(13) + 'asdfasdfasdfasdfasdfasdf' + chr(13) +
'asdfasdfasdfasdfasdfasdf' + chr(13) + 'asdfasdfasdfasdfasdfasdf' +
chr(13) + 'asdfasdfdkkkkkqqqqeeeee' + chr(13) +
'rrrttttttyyyyyuuuuuuuoop1'*, cambios = 'adsads', transferida = .t.,
terminal = 'TRABAJO', usuario = 'jordi', ts = ctot( '09-03-2005
00:18:01' ) where idvisita = 6

En cambio si reduzco en un caracter el campo obser, ya funciona
correctamente:

update visitas set idvisita = 6, idorga = 2, idempre = 9767, fecha =
ctot( '16-12-2004 00:00:00' ) , *obser = 'Se les deja calendario laboral
2005 y nos dicen que son solo 3 trabajadores.' + chr(13) +
'fasdfasdfasdfdasf' + chr(13) + 'adsfasdfasdfasdfasdfasdf' + chr(13) +
'asdfasdfasdfasdfasdfasdf' + chr(13) + 'asdfasdfasdfasdf' + chr(13) +
'asdfasdfasdfffgghhhhjjjj' + chr(13) + 'aasdfsadfasdfsadfsadfkkkkkkkk' +
chr(13) + 'asdfasdfasdfasdf' + chr(13) + 'asdfasdf' + chr(13) +
'adsfasdfasdf' + chr(13) + 'asdfasdfasdfasdfasdfasdf' + chr(13) +
'asdfasdfasdfasdfasdfasdf' + chr(13) + 'asdfasdfasdfasdfasdfasdf' +
chr(13) + 'asdfasdfdkkkkkqqqqeeeee' + chr(13) +
'rrrttttttyyyyyuuuuuuuoop'*, cambios = 'adsads', transferida = .t.,
terminal = 'TRABAJO', usuario = 'jordi', ts = ctot( '09-03-2005
00:18:01' ) where idvisita = 6.

Si ejecuto la linea que genera error desde la ventana de comandos
tambien genera el error.

Gracias de antemano.
Salu2.
Jordi
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida