FoxPro/Visual FoxPro - AYUDA CON UPDATE

   
Vista:

AYUDA CON UPDATE

Publicado por MANY (84 intervenciones) el 03/03/2015 19:22:58
Saludo y gracias por las atenciones que tendré desde ya.

Mi problema es que cuando intento actualizar si la cadena pasa de 7 campos me da un error que dice que hay una frase que no reconoce.

Tengo que dividir el procedimiento en tres parte para poder insertar:

Si al primero o al segundo le agrego otro campo me da el error ya mencionado.

El ultimo soporta 2 campos mas sin dar el error.

SQLEXEC(rc,"update articulos SET descrip=?thisform.descrip.value;
,costo=?thisform.costo.value;
,e1=?thisform.e1.value;
,c1=?thisform.c1.value;
,venta1=?thisform.venta1.value;
,utilidad=?thisform.utilidad.value where articulos.codigo = ?thisform.codigo.value")


SQLEXEC(rc,"update articulos SET e2=?thisform.e2.value;
,c2=?thisform.c2.value;
,venta2=?thisform.venta2.value;
,e3=?thisform.e3.value;
,c3=?thisform.c3.value;
,venta3=?thisform.venta3.value where articulos.codigo = ?thisform.codigo.value")

SQLEXEC(rc,"update articulos SET itbis=?thisform.itbis.value;
,ventae1=?thisform.ventae1.value;
,ventae2=?thisform.ventae2.value;
,ventae3=?thisform.ventae3.value where articulos.codigo = ?thisform.codigo.value")

Que puede estar pasando con esto ya que dividido como esta funciona bien.


Gracias nuevamente.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

AYUDA CON UPDATE

Publicado por Fidel José (558 intervenciones) el 04/03/2015 00:44:09
La cadena construida de esa forma resulta demasiado larga. Curiosamente, la concatenación funciona sin problemas.
Una variable de cadena puede contener 16,777,184 caracteres, mientras que cada entrada puede contener 255.
También hay una limitacion de 8192 caracteres por línea, por ejemplo para fget(lnHandler,8192).

Por eso, normalmente se construye la cadena antes, concatenando partes o, por ejemplo, una solución con TEXT/ENDTEXT

TEXT TO lcTExt NOSHOW PRETEXT 15
update articulos SET itbis=?thisform.itbis.value,
ventae1=?thisform.ventae1.value,
ventae2=?thisform.ventae2.value,
ventae3=?thisform.ventae3.value
where articulos.codigo = ?thisform.codigo.value
ENDTEXT

SQLEXEC(rc,lcText)

PRETEXT 15 surge de 1 + 2 + 4 + 8
Examina también la alternativa de TEXT TO lcText TEXTMERGE NOSHOW PRETEXT 15
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA CON UPDATE

Publicado por Juan (71 intervenciones) el 05/03/2015 13:28:33
Hola Fidel.

Me puedes explicar mejor que quiere decir lo de PRETEXT 15, no entiendo eso de que surge de 1+2+4+8

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA CON UPDATE

Publicado por Fidel José (558 intervenciones) el 05/03/2015 21:06:40
Estos son los valores que se pueden utilizar para PRETEXT. De acuerdo a lo que necesitas lograr, sumas los distintos valores.

Value (Additive) Description
1 Eliminate spaces before each line.
2 Eliminate tabs before each line.
4 Eliminate carriage returns, for example, blank lines, before each line.
8 Eliminate line feeds.

Pretext 15 consigue que todo el contenido de Text / Endtext quede en una sola línea, más allá de como lo escribas:
Ejempo:

TEXT TO lcSelect NOSHOW PRETEXT 15
SELECT FVJ.FECHREP,FVJ.IDCLIEN,FVJ.IDFLET,
FVJ.INFOREP,FVJ.ORIGEN,FVJ.DESTINO,
FVJ.IMPORTE,FVJ.IMPOLIQ,FVJ.FACTURA,
FLE.NOMBRE AS FLETERO,CLI.NOMBRE AS CLIENTE
FROM FACVIAJE AS FVJ,FLETEROS AS FLE ,CLIENTES AS CLI
ORDER BY FLETERO,FECHREP
WHERE FVJ.FECHREP BETWEEN LDDIA1 AND LDDIA2
AND FVJ.IDFLET#lcExclude AND
FVJ.IDFLET=FLE.IDFLET AND
FVJ.IDCLIEN=CLI.IDCLIEN
ENDTEXT


En cambio, para ejecutar un ExecScript() se necesita que se mantenga la separación de líneas, por lo que necesitamos también que PRETEXT sea 1 + 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TEXT TO lcText NOSHOW PRETEXT 3
LPARAMETERS tcFile
lClose=.f.
IF NOT USED(tcFile)
	USE (tcFile) IN 0 SHARED
	lClose=.t.
ENDIF
DO FORM fmaestro WITH tcFile
IF lClose
	SELECT (tcFile)
	USE
ENDIF
ENDTEXT
 
EXECSCRIPT(lcText,"CLIENTES")

En otros casos, generalmente cuando se envía un texto a un Edibox o a otra salida, tal vez convenga PRETEXT 7
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar