Comparar campos memo

¿Hay alguna forma de comparar un campo memo con el contenido de un edit box?
Yo intenté una comparación común que funciona con variables y campos de texto pero no reacciona ante un campo memo.
Desde ya muchas gracias!
Viviana

1 respuesta

Respuesta
1
Creo que depende de como los estés comparando, ya lo cheque y si se pueden comparar, yo lo hice en Visual FoxPro 7 y si funcionó. Lo que debes de tomar en cuenta es si estas usando una comparación simple (x = y) o un comparación exacta (x == y), tambien puedes checar los comandos <SET EXACT> y <SET ANSI>. Otra cosa que puede influir son los caracteres de control, es decir, los saltos de línea y los retornos de carro (Enter) que se inserta automáticamente en los camos memo al usar la tecla <Enter>.
Por otro lado, se nesecitaría saber más acerca de tu problema, como por que es que necesitas hacer esa comparación, ya que tal vez haya otras formas de resolver ese problema. Explicame más de tu problema y si puedo, con gusto te ayudaré.
Por otro lado, necesitaría saber más acerca de tu problema, como por que es que necesitas hacer esa comparación, ya que tal vez haya otras formas de resolver ese problema. Explicame más de tu problema y si puedo, con gusto te ayudaré.
(Solo para corregir mi error ortográfico...)
Bueno, el tema es así: tengo una formulario con un pageframe con tres page, en cada page tengo algunos campos, y un campo memo que lo muestro en un editbox. El formulario no tiene un botón con la acción de guardar, sino que cuando cierra el formulario en el release tomo los valores que están en cada campo y los comparo con los campos originales de la tabla. Si alguno cambió muestro un mensaje: "Algunos datos han sido cambiados. Desea guardar los cambios?.
Más o menos es eso. El tema es que probablemente lo único que cambie el usuario cada vez que entre sea el campo memo y luego cierre el formulario esperando que le pregunte si guarda o no.
Este es el código que uso.
IF thisform.pageframe1.Page2.datos_clinicos.value <> cur_hcdatos.datosclini
ndecide = MESSAGEBOX("Los datos han sido modificados. ¿Desea guardar los cambios realizados?", 3)
Endif
Donde tendría que setear los comandos <set exact> y <set ansi>?
Viviana.
Ya veo, pues me parece que la forma en que lo estas haciendo debería funcionar, tal vez sean algunas configuraciones del EditBox las que esta causando este problema, checa las propiedades <AddLineFeeds> y <AllowTabs>.
Dime cuál es el resultado que obtienes.
Otra cosa que pudieras intentar es utilizar una variable para guardar el valor del EditBox después de que le asignes el valor del campo memo, lo puedes hacer en el Evento Init del Formulario pero tendrías que declarar dicha variable como pública (PUBLIC Nombre_Variable). Cuándo hagas la comparación, utilizarías esa variable en vez del campo de la tabla. Suponiendo que se llamará "cDatosCli" tu código quedaría algo así:
IF ThisForm.PageFrame1.Page2.Datos_Clinicos.Value <> cDatosCli
    ...
Endif
RELEASE cDatosCli
Ya investigué un poco más sobre los comandos <SET EXACT> y <SET ANSI>, la verdad creo que en este caso no te ayudarían mucho. Estos comandos por predeterminado están apagados (OFF) pero si aún te interesa utilizarlos yo recomendaría que los pusieras en tu Programa Principal, es decir, el archivo PRG que ejecutas al iniciar tu aplicación, ahí puedes incluir todos estos parámetros para establecer la configuración inicial.
Bueno, lamento informarte que no me funcionó. Puse <AddLinesFeed> y <Allows Tabs> en verdadero, y agregué los comandos set exact y set ansi, y además guardé el valor original en una variable, pero no resultó.
¿Vos lo probaste y te anda? ¿Le asignas comillas o le agregas algo más?
Si ya vi que se pone medio especial, me parece que el problema es que cuando utilizas el operador "<>" para hacer la comparación, éste hace una comparación simple, es decir, aunque las dos cadenas sean diferentes la comparación se hace con los caracteres de la primer cadena, por ejemplo:
"Unos" <> "Uno", esto es falso a pesar de que las cadenas sean diferentes ya que se comparan solo las tres letras de la segunda cadena ("Uno").
Haz la prueba, puedes escribir [? "Unos" <> "Uno"] en la ventana de comandos para ver los resultados (Falso - .F. o Verdadero - .T.).
Bueno, la solución para eso sería utilizar la negación de una comparación exacta, así:
IF NOT (ThisForm.PageFrame1.Page2.Datos_Clinicos.Value == Cur_HcDatos.DatosClini)
    ...
Endif
Otra cosa que debes considerar es que al salir de tu formulario la posición del registro actual sea la misma que usaste al principio, cuando llenaste el EditBox, para que no tengas problemas de remplazar registros erróneos.
Subí un ejemplo por si lo quieres checar, este es el enlace:
http://rapidshare.com/files/137625890/CompMemo.rar.html
Suerte !
Te agradezco muchísimo. Me anduvo y estoy feliz por eso. Ya había pensado en comparar carácter a carácter.
Muchas gracias de nuevo.
Viviana.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas