Estaré desactualizado con manejo de campos memo?

1,580 views
Skip to first unread message

murquijo

unread,
Jan 21, 2011, 9:02:31 AM1/21/11
to Comunidad de Visual Foxpro en Español
Hola a todos
Me han puesto a desarrollar nuevamente para capturar una información
que obligatoriamente debe llevar campos memo. Con todo lo que adoro a
VFP sé que su fuerte no son los campos memo porque si se va la luz con
las tablas abiertas pasa lo que todos sabemos. Mensaje de archivo fpt
dañado, etc....

Hoy me he puesto a hacer pruebas simulando la ida de la luz con una
tabla que contiene campos memo. La abro y mientras estoy en plena
edicion mato a la fuerza VFP pero no logro dañar el archivo fpt. Será
que ando muy desactualizado y vfp 9 (mi versión) incluyó algunas
características para ofrecer mayor proteciión a los susodichos
archivos?

Alguien por favor me podría actualizar o decir cómo logro dañarla para
preparar un Plan B.

Muchas gracias de antemano
Mauricio

melezama

unread,
Jan 21, 2011, 9:13:56 AM1/21/11
to Comunidad de Visual Foxpro en Español
¿Por qué precisás "sí o sí" trabajar con campos memo?

Yo no los utilizo nunca. Tengo una tabla adicional de textos, donde el
campo texto tiene 80 caracteres, convierto todos los renglones del
texto en una variable memo, la presento en un editbox para que el
usuario edite lo que quiera, y después lo vuelvo a convertir y lo
grabo como caracter.

Si lo precisás te puedo pasar la explicación y el código.

Slds.
Martín.

Jose Zurita

unread,
Jan 21, 2011, 9:21:14 AM1/21/11
to PublicesvFoxpro
Es interesante lo que dices, sería de gran utilidad que pudieras pasar algún ejemplo sencillo.
Lo que entendí es que nunca guardas en la tabla el valor del campo como Campo Memo, sino que lo guardas en diferentes filas como caracteres, como controlas estas filas para saber que es del mismo campo al que te refieres dentro del registro o Forma?
Lo que haces es utilizar controles de campos memos... y ya que el usuario halla capturado todo el valor, guardas el valor en diferentes campos textos?

Por ejemplo, imaginemos que utilizamos un control editbox dentro de una forma
Comentarios:

Imaginemos que el usaurio captura un comentario de 300 caracteres... dfe que manera controlas este valor en diferentes campos tipo caracter dentro de tu tabla Textos?
Como separas en diferentes registros el valor de este campo para guardarlo en la tabla textos?

> Date: Fri, 21 Jan 2011 06:13:56 -0800
> Subject: [vfp] Re: Estaré desactualizado con manejo de campos memo?
> From: mele...@gmail.com
> To: publice...@googlegroups.com

melezama

unread,
Jan 21, 2011, 9:37:46 AM1/21/11
to Comunidad de Visual Foxpro en Español
Claro, tenés distintas filas de registros.

Por ejemplo, supongamos esta estructura de tabla:

textos.dbf
idregistro - entero - Guarda el id del registro de la tabla principal.
renglon - entero - Guarda el número de renglón del campo (si tenemos
un campo memo que tiene 3 líneas de texto, tendremos 3 renglones)
campo - caracter(10) - Esto es por si para un mismo form, tenemos más
de un campo memo. Por ejemplo, uno de descripción y uno de
comentarios. Entonces, guarda para saber en dónde lo tenemos que
mostrar después. Ej.: "descrip" o "coment".
texto - caracter(80) - Guarda el renglón de texto.

Cuando creamos los campos para que el usuario los edite, hacemos lo
siguiente.

create cursor curtextos (idregistro i, descrip m, coment m)

***** SUPONGAMOS
lcCursor = "curtextos"
lnRegistro = 8

Después, yo utilizo el siguiente código para leer y para grabar.

****** LEER

SELECT idregistro, renglon, campo, texto FROM textos ;
WHERE BETWEEN(STR(idregistro) + STR(renglon), ;
STR(lnRegistro) + STR(1), ;
STR(lnRegistro) + STR(9999)) ;
AND !EMPTY(campo) ;
ORDER BY campo, renglon ;
INTO CURSOR curaux

SELECT curaux
GO TOP

DO WHILE !EOF()
lcCampo = curaux.campo
lcTexto = ""

SCAN WHILE curaux.campo = lcCampo
lcTexto = lcTexto + curaux.texto
ENDSCAN

SELECT (lcCursor)
REPLACE (lcCampo) WITH lcTexto
SELECT curaux

ENDDO

Si me aguantás un poquito, después te paso la de grabación, ya que
tengo que planteártela de distinta manera a como la tengo yo para que
no te confunda, ja.

Slds.

Martín.

On 21 ene, 11:21, Jose Zurita <jzur...@hotmail.com> wrote:
> Es interesante lo que dices, sería de gran utilidad que pudieras pasar algún ejemplo sencillo.
> Lo que entendí es que nunca guardas en la tabla el valor del campo como Campo Memo, sino que lo guardas en diferentes filas como caracteres, como controlas estas filas para saber que es del mismo campo al que te refieres dentro del registro o Forma?
> Lo que haces es utilizar controles de campos memos... y ya que el usuario halla capturado todo el valor, guardas el valor en diferentes campos textos?
>
> Por ejemplo, imaginemos que utilizamos un control editbox dentro de una forma
> Comentarios:
>
> Imaginemos que el usaurio captura un comentario de 300 caracteres... dfe que manera controlas este valor en diferentes campos tipo caracter dentro de tu tabla Textos?
> Como separas en diferentes registros el valor de este campo para guardarlo en la tabla textos?
>
>
>
> > Date: Fri, 21 Jan 2011 06:13:56 -0800
> > Subject: [vfp] Re: Estaré desactualizado con manejo de campos memo?
> > From: melez...@gmail.com
> > > Mauricio- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

Jose Zurita

unread,
Jan 21, 2011, 9:41:43 AM1/21/11
to PublicesvFoxpro
Espero mejor para que me pases todo junto

> Date: Fri, 21 Jan 2011 06:37:46 -0800

> Subject: [vfp] Re: Estaré desactualizado con manejo de campos memo?

murquijo

unread,
Jan 21, 2011, 9:50:03 AM1/21/11
to Comunidad de Visual Foxpro en Español
Hola Martín. Felicitaciones por tu idea !!! Excelente para aplicarla
sin embargo les comparto que me extraña que llevo dos horas tratando
de dañar una tabla que contiene campos memo y no lo he logrado aún.
Será por mi S.O. Win 7 ?

Saludos
Mauricio


On 21 ene, 09:41, Jose Zurita <jzur...@hotmail.com> wrote:
> Espero mejor para que me pases todo junto
>
> > Date: Fri, 21 Jan 2011 06:37:46 -0800
> > Subject: [vfp] Re: Estaré desactualizado con manejo de campos memo?
> > From: melez...@gmail.com

melezama

unread,
Jan 21, 2011, 10:08:15 AM1/21/11
to Comunidad de Visual Foxpro en Español
***** GRABAR
lnRenglon = 0
lnRegistro = 8

lnTotalMemos = 2 && tenemos dos campos en nuestro ejemplo, descrip y
coment.
LOCAL ARRAY laMemos[2]
laMemos[1] = "descrip"
laMemos[2] = "coment"

**** PRIMERO, pone en blanco todos los textos que existían de ese
registro.
UPDATE textos SET campo = "", renglon = 0, texto = "" WHERE
textos.idregistro = lnRegistro

SELECT curtextos
GO TOP

SCAN
FOR i = 1 TO ALEN(laMemos)
SELECT textos
lcCampo = laMemos[i]
lcCampoAux = "curtextos." + lcCampo
lcTexto = EVAL(lcCampoAux)
lnTotalRengl = IIF(MOD(LEN(&lcCampoAux),80)=0 ,;
LEN(&lcCampoAux)/80, ;
INT(LEN(&lcCampoAux)/80)+1) &&
cantidad de renglones a grabar.

FOR lnRenglon = 1 TO lnTotalRengl
*- Primero dispara un UPDATE por si existía información.
No debería, ya que la blanqueé.
UPDATE textos SET ;
campo = lcCampo, ;
renglon = lnRenglon, ;
texto = SUBSTR(lcTexto,(80*(lnRenglon-1)) + 1,80) ;
WHERE STR(idregistro) + STR(renglon) = STR(lnRegistro)
+ STR(lnRenglon)

IF _TALLY = 0
INSERT INTO textos ;
(idregistro, ;
campo, ;
renglon, ;
texto) ;
VALUES ;
(lnRegistro, ;
lcCampo, ;
lnRenglon, ;
SUBSTR(lcTexto,(80*(lnRenglon-1)) + 1,80))
ENDIF

ENDFOR

ENDFOR

lnRenglon = 0

SELECT curtextos
ENDSCAN

Y listo.

Probate crear eso y testearlo, cualquier cosa me preguntás, no hay
problema. Con el primer programita vas a poder leer todo lo que tengas
en textos y pasarlo a tu curtextos, creado con los dos campos memo
para que los usuarios puedan editarlo como si fuesen memos (ya que en
curtextos, lo son). Con este, te convierte los campos memo de
curtextos en filas de 80 caracteres en textos.dbf (la tabla
definitiva).

Y adiós campos memo, adiós pinchadas de FPT, adiós problemas.

Slds.

Martín.

On 21 ene, 11:41, Jose Zurita <jzur...@hotmail.com> wrote:
> Espero mejor para que me pases todo junto
>
>
>
> > Date: Fri, 21 Jan 2011 06:37:46 -0800
> > Subject: [vfp] Re: Estaré desactualizado con manejo de campos memo?
> > From: melez...@gmail.com
> > > - Mostrar texto de la cita -- Ocultar texto de la cita -

Jose Zurita

unread,
Jan 21, 2011, 10:12:29 AM1/21/11
to PublicesvFoxpro
Lo analizaré y trataré de aplicar en un ejemplo
Gracias por tu aportación. Solo como comentario: esto se solucionaría utilizando SQL o alguna base de datos que no sea VFP, pero ayuda mucho para la gente que todavía no esta preparada para migrar su base de datos a una diferente de VFP

> Date: Fri, 21 Jan 2011 07:08:15 -0800

> Subject: [vfp] Re: Estaré desactualizado con manejo de campos memo?

melezama

unread,
Jan 21, 2011, 10:17:32 AM1/21/11
to Comunidad de Visual Foxpro en Español
O bien para pequeñas empresas cuyo volumen de información no amerita
tener una base de datos SQL. En mi caso trabajo mucho con Pequeñas y
Medianas empresas, y realmente no necesitan una base de datos SQL.
Entonces, sigo utilizando los DBF con ellos.

Saludos.

On 21 ene, 12:12, Jose Zurita <jzur...@hotmail.com> wrote:
> Lo analizaré y trataré de aplicar en un ejemplo
> Gracias por tu aportación. Solo como comentario: esto se solucionaría utilizando SQL o alguna base de datos que no sea VFP, pero ayuda mucho para la gente que todavía no esta preparada para migrar su base de datos a una diferente de VFP
>
>
>
> > Date: Fri, 21 Jan 2011 07:08:15 -0800
> > Subject: [vfp] Re: Estaré desactualizado con manejo de campos memo?
> > From: melez...@gmail.com

melezama

unread,
Jan 21, 2011, 10:19:12 AM1/21/11
to Comunidad de Visual Foxpro en Español
Ja... puede ser, vaya a saber uno. El tema es que esto lo tengo creado
desde hace años, cuando los daños en campos memo eran más una regla
que una excepción.
> > > > - Mostrar texto de la cita -- Ocultar texto de la cita -

Walter R. Ojeda Valiente

unread,
Jan 21, 2011, 10:58:59 AM1/21/11
to publice...@googlegroups.com
Hola Martín

Tuvimos la misma idea.

Yo hace años que dejé de utilizar campos memo porque eran muy propensos a dañarse, en lugar de eso tengo una tabla con un campo que me sirve para relacionarla con la tabla principal y otro campo de tipo caracter donde se guarda el texto.

Funciona muy rápidamente y es muy seguro, me olvidé de los memo y de sus problemas asociados.

Saludos.

Walter.



> Date: Fri, 21 Jan 2011 07:19:12 -0800

> Subject: [vfp] Re: Estaré desactualizado con manejo de campos memo?

IVAN MARTINEZ

unread,
Jan 21, 2011, 12:48:48 PM1/21/11
to publice...@googlegroups.com
No he tenido problema con campos memos en 15 años. (fpdos, fpwin, vfp3, vfp6)
 
Ivan


Carlos Miguel FARIAS

unread,
Jan 22, 2011, 8:40:29 AM1/22/11
to publice...@googlegroups.com
Hola: Mi experiencia con campos memos, en muchos sistemas, es que no he tenido mayormente problemas (toco mi cabeza, por lo de "toco madera"), es mas con sistemas donde toda la data estaba en campos memos (sistemas de información textual), con campos memos con muchos datos (varios megas de texto en 2000 o 3000 registros).
Los campos memos, se rompen sin coincide el momento de la grabación con el de corte de luz.
Cuando modificamos un campo memo, el fox graba la información en un area aparte (agregada) del campo memo, y la apunta desde el campo que figura dentro de la tabla, si la luz se corta entre los instantes de grabación del apuntador y la grabación del texto en el archivo ftp, hay se corrompe, o dependiendo como tenga configurado el segmento (ancho de) cada linea en el ftp, cada segmento se apunta a otro (lista encadenada) y ahi se puede producir la falla.
Por ley de Murphy, si tenes buen backup, no se te corrompen los datos.
Por supuesto que la probabilidad tambien es proporcional a la cantidad de modificaciones en el aire (buffer) que puedan estar ocurriendo simultaneamente. Cuando se hace un pack memo o pack en general, y justo se te corta la luz, quedas como Adan.
La tabla aparte con un registro por renglon, evidentemente es una solución apropiada, e insustituible cuando tu sistema de archivo no maneja campos de longitud variable o memos (caso COBOL y otros).
Por otra parte, esa tabla aparte puede tener problemas de indices (que igualmente, son mas facil de solucionar que la corrupcioon de memos).
Ahora, si tenemos un sistema critico en cuanto a datos, los cortes de luz se solucionan con una ups, no se concibe un sistema empresarial cuando una ups para servidor, cuesta 250 u$s financiada (al menos aca en la Argentina).
Una aclaración, si al VFP lo matas (via S.O.) el S.O. manda inicialmente una instrucción de cierre al programa y este cancela (QUIT) cerrando todo. Si no hay una falla per se. Si el VFP internamente quedo en un bucle o error propio, ahi si puede producirse una perdida de datos en tablas, lo mismo si se corta la luz.
Saludos: Miguel

murquijo

unread,
Jan 22, 2011, 9:49:34 AM1/22/11
to Comunidad de Visual Foxpro en Español
Excelente aporte Miguel. Ahora entiendo porque no se me dañaba nada
cuando mataba el S.O.
Estoy de acuerdo con todo lo que dices pero mi desarrollo no puede
contar con UPSs porque es
levantamiento de información en campo con usuarios que llevan su
propio portatil.

Despues de leer todos los aportes a este hilo decidí por tiempo y
practicidad manejar
cursores y solamente hacer grabación con la instrucción insert into
que es la más
eficaz y rápida por lo tanto el riesgo de daño se disminuye
considerablemente.

Muchísimas gracias nuevamente por todos los comentarios
Mauricio

On 22 ene, 08:40, Carlos Miguel FARIAS <carlosmiguelfar...@gmail.com>
wrote:
> El 21 de enero de 2011 14:48, IVAN MARTINEZ <ivan...@gmail.com> escribió:
>
> >  No he tenido problema con campos memos en 15 años. (fpdos, fpwin, vfp3,
> > vfp6)
>
> > Ivan
>
> >  ------------------------------
>
> > > Date: Fri, 21 Jan 2011 07:19:12 -0800
> > > Subject: [vfp] Re: Estaré desactualizado con manejo de campos memo?
> > > From: melez...@gmail.com

Ernsto Hervert

unread,
Jun 25, 2014, 3:23:30 PM6/25/14
to publice...@googlegroups.com
me interesa este articulo pero no lo comprendo muy bien no se si podrias explicarme como iria el campo memo (o de texto) en la tabla principal

Fernando D. Bozzo

unread,
Jun 25, 2014, 5:46:56 PM6/25/14
to publice...@googlegroups.com
Hola Ernesto, el hilo es de hace 3 años...
Reply all
Reply to author
Forward
0 new messages