Cadena muy larga en instruccion INSERT INTO... en VFP

1,081 views
Skip to first unread message

Frank Alvarez

unread,
Sep 30, 2013, 5:52:51 PM9/30/13
to publice...@googlegroups.com
Mis estimados amigos:

Mi mas cordial saludo.
Estoy desarrollando una aplicacion de VFP con Mysql, pero se me ha presentado el
caso en que hago una captura de datos en un formulario y cuando preparo la
cadena del INSERT INTO en una variable de memoria el foxito me dice que tengo un
error en la instruccion, pero no hay tal error, porque ya revisé exhaustivamente
y lo que sucede es que son bastantes campos los que tengo que insertar en la
tabla por lo tanto la cadena se vuelve muy extensa y supongo que el vfp tiene
algúna limitante en cuanto a eso. De casualidad se han topado con esta situación
y me podrían dar alguna luz sobre como resolverla?
Les estaré altamente agradecido porque estoy urgido con este desarrollo.

Atte.,


Frank Alvarez
falvarez2005@...

Fidel Charny

unread,
Sep 30, 2013, 6:01:21 PM9/30/13
to publice...@googlegroups.com
Tienes tres soluciones:

Insert into miTabla (campo1,;
campo2,;
campo3,;
campo4,;
values(vCampo1,;
vCampo2,;
vCamop3,;
vCampo4)

Pero si necesitas conformar cadenas, puedes concatenar por partes
lcParte1="cCampo1,cCampo2,cCampo3,";
+"cCampo4,cCampo5,cCampo6,";
+"cCampo7,cCampo8,cCampo9"

O utilizar TEXT TO ... ENDTEXT

Fidel Charny

unread,
Sep 30, 2013, 6:03:30 PM9/30/13
to publice...@googlegroups.com
Perdón Frank, no leí lo de MySql. La primer solución es para tablas nativas. Es alguna de las otras dos.

Víctor Hugo Espínola Domínguez

unread,
Sep 30, 2013, 6:09:55 PM9/30/13
to publicesvfoxpro
Hola Frank

TEXT TO lcInsertCmd NOSHOW PRETEXT 15
INSERT INTO tabla 
(
campo1, campo2, etc..., etc..., etc..., etc..., etc..., etc..., etc...
, etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc...
, etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc...
, etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc...
)
VALUES
(
?lVar1, ?lVar2, ?lVar3, ?lVar4, , etc..., etc..., etc..., etc..., etc..., etc...
, etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc...
, etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc...
, etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc...
)

ENDTEXT

Saludos,
Víctor.
Lambaré - Paraguay.

MALKASOFT ADPI: http://www.developervfp.blogspot.com/

unread,
Sep 30, 2013, 6:33:51 PM9/30/13
to publice...@googlegroups.com
hola revisa este vídeo para que te des una idea http://www.youtube.com/watch?v=PCCZvCaet74



Pd.: Descargate mi grilla que tiene multiples funciones como filtrar, multiseleccion, búsqueda, etc del siguiente link http://www.developervfp.blogspot.com/p/gridlibre-v35.html. Ahora también puedes bajarte mi ultima herramienta Busqueda Incremental con un TEXTBOX http://developervfp.blogspot.mx/p/busqueda-incremental-con-un-textbox.html  las herramientas viene con código fuente, ojo no hacer mal uso por favor. 


Saludos; 


Ing. Russvell Jesus Soto Gamarra 
San Juan del Rio - Queretaro - Mexico 
Nextel.: 52*133750*16
rycjesusrj @ hotmail.com
Framework Multi-conexion version 6.0 (nueva)

Frank Alvarez

unread,
Sep 30, 2013, 6:48:26 PM9/30/13
to publice...@googlegroups.com
Se les agradece su tiempo y sus respuestas, me funcionó lo del TEXT TO ... ENDTEXT, ya que por ese error el VFP no me dejaba guardar el formulario en cuestion.
Gracias nuevamente y estoy a sus apreciables órdenes.

Feliz día!!

Frank

Roy Francisco Salas Benavides

unread,
Oct 9, 2013, 12:32:01 PM10/9/13
to publice...@googlegroups.com
Hola Frank, un poco a distiempo mi aporte, pero es bueno para ampliar conocimientos.
La misma situación me pasó, y es correcto, resulta ser que el VFP o más bien, el SO no soporte una cadena de mas de 256 caracteres "CONTINUOS", entonces procedemos a "engañarlo", de la siguiente manera:

micadena = "insert into table...." (hasta una longitud que no supere los 254 dígitos, para mayor seguirdad yo lo llego hasta los 250)
micadena = micadena + "values(valor1,valor2,valor3..." (igual, que esta nueva cadena no super los 250, de esta forma nunca es una sola cadena "CONTINUA" sino que lo vas concatenando "disimuladamente" hasta que tienes el string de proceso completado y listo, luego solo mandas el SQLEXEC.

micadena = "insert into table mitabla(campo1,campo2,campo3,...."
micadena = micadena + "campo4,campo5,....,campo6)"
micadena = micadena + " values(valor1,valor2,valor3...,campo6)"
SQLEXEC(lnHandle,micadena,micursor)

Saludos.

Roy Salas Benavides
Costa Rica

Frank Alvarez

unread,
Oct 9, 2013, 1:04:25 PM10/9/13
to publice...@googlegroups.com
Gracias Roy, es una alternativa muy válida, aunque me gusta mas la opcion del TEXT TO ... ENDTEXT porque así no tienes que estar calculando la cantidad de caracteres. En todo caso se te agradece.

Saludos

--




Frank
Reply all
Reply to author
Forward
0 new messages