Cuadro de textos

Espero que estés bien, mi pregunta es como trabajar con los cuadro de texto de visual foxpro para asignarle valores o algoritmos; por ejemplo en un formulario que contiene un valor como cuota inicial y otro cuota final como hago para que en el campo total deuda aparezca el resultado de sumar la cuota inicial y la final y se actualice enseguida en la tabla.
Otra pregunta.
Yo he trabajado antes con access y este tiene funciones de búsquedas, es decir, al digitar un código, automáticamente en los cauadros de textos aparecen los campos que le pertenecen mediante la función DLOOKUP, ¿en foxpro como puedo hacer esto?
Respuesta
1
No es muy recomendable que lo hagas directamente, ya que ocacionarias mucho tráfico en el acceso a la tabla, sobre todo si trabajas en un entorno de red.
Yo te recomiendo que le asignes un botón para que haga la rutina de actualización, o al menos lo hagas en el evento "LostFocus" para que se actualice cada vez que pierda el foco del campo.
****
Por lo de la búsqueda, en VFP no hay una función o procedimiento predefinido para realizarlo, por ser un DML diferente al de ACCESS, de hecho la consistencia de los datos de VFP es más estable que la de ACCESS.
Te mando una rutinita que he utilizado en uno de mis sistemas en donde se requirió, espero que lo analices y lo puedas aplicar como lo necesitas...
En este ejemplo de BÚSQUEDA INCREMENTAL en un Formulario, debes poner un TextBox (Text1) y una Grilla (Grid1).
En el Entorno de datos insertaremos la tabla (MiTabla)
En el método InteractiveChange del TextBox debes escribir el siguiente código:
*--- InteractiveChange ---
LOCAL lc, lnRecno
SELECT MiTabla
lc = ALLT(THIS.VALUE)
lnRecno = RECNO()
IF MiTabla.Nombre >= lc
IF NOT BOF()
SKIP -1
ENDIF
IF MiTabla.Nombre < lc && debe quedar donde estaba
IF lnRecno <= RECC()
GO RECNO()
ELSE
GO BOTT
ENDIF
RETURN
ENDIF
IF NOT EMPTY(ORDER()) && busqueda con indice
SEEK lc
ELSE
GO TOP
LOCATE REST FOR MiTabla.Nombre=lc WHILE MiTabla.Nombre <= lc NOOPTIMIZE
ENDIF
ELSE
LOCATE REST FOR MiTabla.Nombre=lc WHILE MiTabla.Nombre <= lc NOOPTIMIZE
ENDIF
IF lnRecno # RECNO()
THISFORM.Grid1.SETFOCUS && el nombre del TextBox
THISFORM.Text1.SETFOCUS && el nombre del Grid
ENDIF
RETURN
*--- END InteractiveChange ---
Nota: se debe tener las siguientes consideraciones:
La tabla debe estar ordenada ASCENDENTEMENTE o existir un indice por Nombre y estar seleccionado (el método busca si hay un SET ORDER establecido)
Fijarse bien el nombre del TextBox y del Grid para invocar el método SetFocus (en el ejemplo Grid1 y Text1)
Fijarse el alias de la tabla del grid (en el ejemplo MiTabla)
Conviene que los nombres estén en mayúsculas y añadir en la propiedad Format del TextBox = ! Para que sean ingresados en mayúsculas
Conviene que la propiedad del Grid RecordMark = .T. para que se vea el registro marcado, o manejar el color del registro seleccionado
Gracias por todo, solo te pido que me hagas el favor de como referirme a los cauadros de textos en los formularios, en sus propiedades tienen su nombre yo les coloco dicho nombre y nada los desconoce o no hace nada, tu me recomiendas un botón de comando, pero como me refiero a los valores de los cuadros cuando escriba la fórmula.
Otra más, como adicionar registros nuevos en un formulario que fue creado sin el asistente. Muchas gracias por todo, me has sido muy útil tu ayuda.mil gracias un abrazo!
Para referirte a los cuadros de texto utilizas la propiedad VALUE que es la que muestra los valores en tiempo de ejecución:
Recuerda que para referirte a un cuadro de texto es necesario especificar el objeto contenedor.
Por ejemplo:
ThisForm.Text1.Value = 'Hola'
La propiedad VALUE del textbox es de tipo carácter, por lo que si necesitas mostrar un dato de tipo numérico es necesario que lo conviertas:
Por ejemplo:
Local a,b,c
Store 0 to a,b,c
a = 250
b = 150
c = a + b
ThisForm.Text1.Value = Allt(str(c))
Con una asignación le pones el valor que se mostrará en tiempo de ejecución, pero si necesitas extraer el valor que se ha escrito en el cuadro de texto, utilizas la propiedad como un valor.
por ejemplo:
&&esto lo debes de poner en el evento CLICK del boton de comando o en su defecto en el evento INTERACTIVECHANGE
&& de text1 y text2 para que cada vez que se cambien los valores, automáticamente se muestre el resultado.
*******
Local a,b,c
a = val(Thisform.Text1.Value)
b = val(Thisform.Text2.Value)
c = a + b
Thisform.Text3.value = Allt(str(c))
Suerte !

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas