Está en la página 1de 33

CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

MANTENIMIENTO DE DATOS DESDE UN FORMULARIO


En este capítulo aprenderemos como agregar nuevos registros a una tabla desde un formulario, así
también como marcarlos para posteriormente eliminarlos.

COMANDOS Y FUNCIONES

Antes de comenzar la práctica veremos una serie de comandos y funciones que serán utilizados en
este ejercicio.

CURSORSETPROP():

Especifica la configuración de propiedad para una tabla o un cursor de Visual FoxPro.

Sintaxis:

CURSORSETPROP(cPropiedad [, eExpresión] [, cAliasTabla | nÁreaTrabajo])

Argumentos:
cPropiedad

Especifica la propiedad de la tabla o el cursor que se va a establecer. Observe que Buffering es la


única propiedad que puede especificar para una tabla de Visual FoxPro.

eExpresión

Especifica el valor de la propiedad que especifica con cPropiedad. Si omite eExpresión, se establece el
valor predeterminado de la propiedad.
La tabla siguiente muestra las propiedades que pueden especificarse para cPropiedad y una
descripción de los valores que puede adoptar eExpresión.

Propiedad Valores de eExpresión


BatchUpdateCount* El número de instrucciones de actualización enviadas al origen de datos remoto
para las tablas almacenadas en búfer. 1 es el valor predeterminado. Ajustar este
valor puede aumentar considerablemente el rendimiento de actualización.
Buffering 1 – Desactiva el almacenamiento de filas y tablas en búfer. El bloqueo de
registros y la escritura de datos son idénticos que en versiones anteriores de
FoxPro (el valor predeterminado).
2 – Activa el almacenamiento pesimista de filas en búfer.
3 – Activa el almacenamiento optimista de filas en búfer.
4 – Activa el almacenamiento pesimista de tablas en búfer.
5 – Activa el almacenamiento optimista de tablas en búfer.
SET MULTILOCKS debe establecerse en ON para todos los modos de Buffering
salvo 1 (desactivado).
CompareMemo .T. - Los campos Memo (del tipo Memo, General o Picture) se incluyen en la
cláusula WHERE para actualizaciones.
.F. – No se incluyen los campos Memo en la cláusula WHERE para
actualizaciones.
FetchAsNeeded .T. – Se buscan los registros cuando sea necesario.
.F. – Para vistas remotas, el número de registros buscado se determina

CORPORATIVO CETEC - SICASA 182


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

mediante la propiedad MaxRecord. Para vistas locales, se buscarán todos los


registros.
FetchMemo* .T. – Los campos memo se toman con los resultados de la vista.
.F. – Los campos memo no se toman con los resultados de la vista.
FetchSize* Número de filas tomadas progresivamente del conjunto de resultados de tablas
remotas. El valor predeterminado es 100 filas. Si se establece FetchSize como –
1, se recupera el conjunto completo de resultados (limitado por el valor de
MaxRecords).
KeyFieldList Lista delimitada por comas de los principales campos para el cursor.
No hay valores predeterminados. Es necesario incluir una lista de nombres de
campos.
MaxRecords* El número máximo de filas tomadas cuando se devuelven los conjuntos de
resultados. El valor predeterminado es – 1 (se devuelven todas las filas). Un
valor de 0 especifica que se ejecuta la vista pero que no se toman los
resultados.
Prepared Especifique verdadero (.T.) para preparar instrucciones SQL para llamadas de
función REQUERY( ) subsiguientes. REQUERY( ) sirve para recuperar los datos
para una vista SQL.
SendUpdates .T. – Especifica que se envía una consulta de actualización SQL para actualizar
tablas remotas cuando se realice una actualización mediante la vista.
.F. – Especifica que no se envía una consulta de actualización SQL para
actualizar tablas remotas.
Tables Lista delimitada por comas de los nombres de tablas remotas.
No hay valor predeterminado. Es necesario incluir una lista de nombres de
tablas para que funcionen las actualizaciones.
UpdatableFieldList Lista delimitada por comas de nombres de campos remotos y nombres de
campos locales asignados al cursor.
Utilice esta opción para especificar nombres válidos de Visual FoxPro para
campos de cursor que tengan nombres de campo de Visual FoxPro no válidos.
UpdateNameList Lista de los campos de la vista, delimitados por comas. En esta lista pueden
figurar campos de tablas remotas y locales. Es necesario incluir una lista de
campos para que funcionen las actualizaciones.
UpdateType 1 – Especifica que los datos antiguos se actualizan con los nuevos (es el valor
predeterminado).
2 – Especifica que para actualizar los datos, se eliminan los datos antiguos y se
insertan los nuevos.
UseMemoSize* Especifica el tamaño mínimo (en bytes) para el que se devuelven las columnas
de resultados en campos memo. Por ejemplo, si el ancho de una columna es
mayor que el valor de UseMemoSize, el resultado de la columna se almacena
en un campo memo. UseMemoSize puede variar de 1 a 255; el valor
predeterminado es 255.
WhereType La cláusula WHERE empleada para actualizar tablas remotas. WhereType
puede asumir los valores siguientes:
1 o DB_KEY (de FOXPRO.H). La cláusula WHERE usada para actualizar tablas
remotas sólo consta de campos principales especificados con la propiedad
KeyFieldList.

CORPORATIVO CETEC - SICASA 183


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

2 o DB_KEYANDUPDATABLE (de FOXPRO.H). La cláusula WHERE usada


para actualizar tablas remotas consta de los campos principales especificados
con la propiedad KeyFieldList y cualquier campo actualizable.
3 o DB_KEYANDMODIFIED (de FOXPRO.H) (valor predeterminado). La
cláusula WHERE empleada para actualizar tablas remotas consta de los
campos principales especificados con la propiedad KeyFieldList y cualquier otro
campo modificado.
4 o DB_KEYANDTIMESTAMP (de FOXPRO.H). La cláusula WHERE usada
para actualizar tablas remotas consta de los campos principales especificados
con la propiedad KeyFieldList y una comparación de las marcas de hora.

Esta propiedad se utiliza principalmente para vistas remotas; el hecho de establecerla no tiene ningún
efecto sobre las vistas locales. Sin embargo, puede pre-establecer esta propiedad para vistas locales
que vayan a aumentar de tamaño.

cAliasTabla

Especifica el alias de la tabla o el cursor para los que se establece la propiedad.

nÁreaTrabajo

Especifica el área de trabajo de la tabla o el cursor para los que se establece la propiedad. Si
especifica 0 para nÁreaTrabajo, CURSORSETPROP( ) establece el valor de entorno utilizado para
todas las tablas o cursores subsiguientes.

Ejemplo:

CURSORSETPROP("buffering",5,"ALUMNOS")
CURSORSETPROP("buffering",1,"CALIFICACIONES")

APPEND

Agrega uno o más registros nuevos al final de una tabla.


Sintaxis
APPEND [BLANK]
[IN nÁreaTrabajo | cAliasTabla]
[NOMENU]

Argumentos:

BLANK

Agrega un registro en blanco al final de la tabla activa. Visual FoxPro no abre ninguna ventana de
edición cuando usted ejecuta APPEND BLANK.
Es posible modificar los nuevos registros con BROWSE, CHANGE o EDIT.

IN nÁreaTrabajo

Especifica el área de trabajo de la tabla a la que se agrega el nuevo registro.

IN cAliasTabla

Especifica el alias de la tabla a la que se agrega el nuevo registro.

CORPORATIVO CETEC - SICASA 184


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

Ejemplo:

APPEND BLANK
APPEND BLANK IN 1
APPEND BLANK IN ALUMNOS

TABLEUPDATE()

Graba los cambios realizados en una fila o una tabla almacenada en búfer o en un cursor.

Sintaxis

TABLEUPDATE([nFilas [, lForzar]] [, cAliasTabla | nÁreaTrabajo]


[, cMatrizErrores])

Argumentos:

nFilas

Especifica qué modificaciones se han introducido de las realizadas en la tabla o en el cursor. Si nFilas
es 0 (o .F.) y está activado el almacenamiento de tablas o filas en búfer, sólo se introducirán las
modificaciones realizadas en el registro actual de la tabla o del cursor.
Si nFilas es 1 y está activado el almacenamiento de tablas en búfer, todas las modificaciones
realizadas en los registros se introducirán en la tabla o en el cursor. Si nFilas es 1 (o .T.) y está
activado el almacenamiento de filas en búfer, sólo se introducirán las modificaciones realizadas en el
registro actual de la tabla o cursor.
Si nFilas es 2, los cambios realizados en la tabla o en el cursor se confirmarán como en el caso en que
nFilas 1. Sin embargo, no se producirá un error cuando no se pueda confirmar un cambio y Visual
FoxPro continuará procesando el resto de los registros en la tabla o en el cursor. Si se incluye
cMatrizErrores, cuando se produzca un error se creará una matriz con información acerca del mismo.
El valor predeterminado para nFilas es 0.

Ejemplo:

TABLEUPDATE()
TABLEUPDATE(2)

TABLEREVERT()

Descarta los cambios realizados en una fila o en una tabla almacenada en búfer o en un cursor y
restaura los datos de OLDVAL( ) para cursores remotos y los valores del disco actual para tablas y
cursores locales.

Sintaxis

TABLEREVERT([lTodasFilas [, cAliasTabla | nÁreaTrabajo]])

Argumentos

lTodasFilas

Determina si se descartan los cambios realizados en la tabla o el cursor. Si lTodasFilas es verdadero


(.T.) y está activado el almacenamiento de tablas en búfer, se descartarán los cambios realizados en
todos los registros de la tabla o el cursor. Si lTodasFilas es falso (.F.) y está activado el

CORPORATIVO CETEC - SICASA 185


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

almacenamiento de tablas en búfer, sólo se descartarán los cambios realizados en el registro actual de
la tabla o el cursor.
Si está activado el almacenamiento de filas en búfer, se pasará por alto el valor de lTodasFilas y se
descartarán los cambios realizados en el registro actual de la tabla o el cursor.
El valor predeterminado para lTodasFilas es falso (.F.).

cAliasTabla

Especifica el alias de la tabla o el cursor en el que se descartan los cambios.

nÁreaTrabajo

Especifica el área de trabajo de la tabla o el cursor en el que se descartan los cambios.

Ejemplo:

TABLEREVERT(1)
TABLEREVERT(2)
TABLEREVERT(CALIFICACIONES)

DELETE

Marca el registro o los registros que de van a eliminar.

Sintaxis
DELETE
[Alcance] [FOR lExpresión1] [WHILE lExpresión2]
[IN nÁreaTrabajo | cAliasTabla]
[NOOPTIMIZE]

Argumentos:

Alcance

Especifica un intervalo de registros que desea marcar para su eliminación. Las cláusulas de alcance
son: ALL, NEXT nRegistros, RECORD nNúmeroRegistro y REST.

El alcance predeterminado para el comando DELETE es el registro actual (NEXT 1).

FOR lExpresión1

Especifica una condición por la cual solamente se marcan para su eliminación los registros que
satisfacen la condición lógica lExpresión1.
Rushmore (tecnología para optimizar la recuperación de datos) optimizará una consulta creada con
DELETE ... FOR si lExpresión1 es una expresión optimizable y la tabla está indexada por DELETED( ).
Para obtener un mejor rendimiento, utilice una expresión optimizable en la cláusula FOR.

WHILE lExpresión2

Especifica una condición por la cual los registros se marcan para su eliminación siempre y cuando
lExpresión2 dé como resultado verdadero (.T.).

IN nÁreaTrabajo

CORPORATIVO CETEC - SICASA 186


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

Especifica el área de trabajo de la tabla en la cual se marcan los registros para su eliminación.

IN cAliasTabla

Especifica el alias de la tabla en la cual se marcan los registros para su eliminación.


Si omite nÁreaTrabajo y cAliasTabla, los registros se marcarán para su eliminación en la tabla del área
de trabajo seleccionada actualmente.

Ejemplo:

DELETE FOR EDAD > 25


DELETE ALL
DELETE IN 2
DELETE NEXT 5

MESSAGEBOX()

Muestra un cuadro de diálogo definido por el usuario.

Sintaxis

MESSAGEBOX(cTextoMensaje [, nTipoCuadroDiálogo [, cTextoBarraTítulo]])

Argumentos:

cTextoMensaje

Especifica el texto que aparece en el cuadro de diálogo. Utilice un retorno de carro (CHR(13)) en
cTextoMensaje para mover una parte del mensaje a la siguiente línea del cuadro de diálogo. El alto y
el ancho del cuadro de diálogo aumentan lo que sea necesario para que quepa cTextoMensaje.

nTipoCuadroDiálogo

Especifica los botones y los iconos que aparecen en el cuadro de diálogo, el botón elegido inicialmente
cuando se muestra y el comportamiento del mismo.
En las tablas siguientes, los valores 0 a 5 del botón del cuadro de diálogo especifican los botones que
aparecen en el mismo. Los valores de icono 16, 32, 48 y 64 especifican el icono que aparece en el
cuadro de diálogo. Los valores predeterminados 0, 256 y 512 especifican qué botón del cuadro de
diálogo es el botón predeterminado. El botón predeterminado se selecciona cuando aparece el cuadro
de diálogo.

Omitir nTipoCuadroDiálogo es lo mismo que especificar un valor de 0 para nTipoCuadroDiálogo.

Valor Botones del cuadro de diálogo


0 Sólo botón Aceptar.
1 Botones Aceptar y Cancelar.
2 Botones Anular, Reintentar e Ignorar.
3 Botones Sí, No y Cancelar.
4 Botones Sí y No.

CORPORATIVO CETEC - SICASA 187


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

5 Botones Reintentar y Cancelar.

Valor Icono
16 Punto.
32 Signo de interrogación.
48 Signo de exclamación.
64 Icono de información (i).

Valor Botón predeterminado


0 Primer botón.
256 Segundo botón.
512 Tercer botón.

nTipoCuadroDiálogo puede ser la suma de hasta tres valores, uno de cada una de las tablas
anteriores. Por ejemplo, si nTipoCuadroDiálogo es: 290 (2+32+256), el cuadro de diálogo especificado
tendrá las siguientes características:

Botones Anular, Reintentar e Ignorar.


El cuadro de mensaje muestra el icono del signo de interrogación.
El segundo botón, Reintentar, es el botón predeterminado.

cTextoBarraTítulo

Especifica el texto que aparece en la barra de título del cuadro de diálogo. Si omite cTextoBarraTítulo,
en la barra de título aparecerá el título "Microsoft Visual FoxPro".

Comentarios

El valor que devuelve MESSAGEBOX( ) indica qué botón del cuadro de diálogo se ha elegido. En los
cuadros de diálogo con un botón Cancelar, al presionar la tecla ESC para salir del cuadro de diálogo
se devolverá el mismo valor (2) que al elegir Cancelar.

Observe que la abreviatura más corta para esta función es MESSAGEB( ).

La tabla siguiente muestra los valores que devuelve MESSAGEBOX( ) para cada botón.

Valor devuelto Botón


1 Aceptar
2 Cancelar
3 Anular
4 Reintentar
5 Ignorar
6 Sí

CORPORATIVO CETEC - SICASA 188


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

7 No
Ejemplo:

MSSAGEBOX(“MENSAJE PRUEBA”)
RESPUESTA=MESSAGEBOX(“¿ESTA SEGURO DE ELIMINAR EL REGISTRO?”, 4+32+256)

Código 32 (signo de
interrogación)
Código 256 activa el
segundo botón
Código 4 (botones Si y No)

RELEASE WINDOWS

Elimina de la memoria ventanas definidas por el usuario o ventanas del sistema de Visual FoxPro.

Sintaxis

RELEASE WINDOWS [ListaNombresVentanas]

Argumentos

ListaNombresVentanas

Especifica las ventanas que se liberan de la memoria. ListaNombresVentanas puede incluir ventanas
definidas por el usuario así como ventanas del sistema de Visual FoxPro. Separe los nombres de las
ventanas mediante comas.

Si no se incluye ListaNombresVentanas, se libera la ventana definida por el usuario activa.

Ejemplo:

RELEASE WINDOWS
RELEASE WINDOWS MIFORMULARIO
RELEASE WINDOWS CLAVE,MENU

CORPORATIVO CETEC - SICASA 189


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

 PRÁCTICA

La siguiente práctica a desarrollar consiste en agregar botones de comando en un formulario para


agregar nuevos registros y poder marcar registros para posteriormente eliminarlos.
Vea la siguiente ventana con los botones que serán creados así como su función:

Se utilizara para
agregar un nuevo
registro en la tabla
Alumnos y
Aceptara los Calificaciones
cambios que se
realicen en las
dos tablas Marcará el registro
para ser eliminado
Cancela los
cambios
realizados a los Cerrará la ventana
registros de las del formulario
dos tablas

1. Abra su base de datos EJEMPLO y su formulario PAGINAS.

1) Abra su base de
datos EJEMPLO

Este formulario fue


creado en el capítulo
anterior
2) Abra el
formulario
PAGINAS

CORPORATIVO CETEC - SICASA 190


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

3) De un clic en 4) Busque la
la barra de título propiedad NAME
o en cualquier y cambie el
área en blanco nombre del
del formulario formulario por
para MIFORMULARIO
seleccionarlo
(cuide de no dar
clic sobre el
Marco de página
o los botones de
clase)

5) Agregue cinco
botones de
comando y
cambie la
propiedad Caption
como lo muestra
la figura

6) Cambie la propiedad NAME de cada botón por:


cmdAGREGAR, cmdACEPTAR, cmdELIMINAR, cmdCANCELAR y
cmdSALIR según le corresponda a cada botón

2. El primer código que agregaremos será en el evento INIT del formulario este código nos
servirá para poder realizar cambios en las tablas ALUMNOS y CALIFICACIONES.

1) De doble clic
sobre un área
en blanco del
formulario (cuide
de no dar doble
clic sobre algún
control) para
abrir la ventana
de código

CORPORATIVO CETEC - SICASA 191


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

Verifique que se 2) Seleccione el


encuentre en el procedimiento de
objeto o control evento INIT
MIFORMULARIO

En el evento INIT del formulario, escriba las siguientes líneas de código:


SET DELETED ON
PUBLIC NUEVO
NUEVO = 0
CURSORSETPROP("BUFFERING",5,"ALUMNOS")
CURSORSETPROP("BUFFERING",5,"CALIFICACIONES")

Es importante que
escriba las líneas tal y
como lo marca el
ejemplo sin cambiar ni
quitar letras para evitar
posibles errores

3) Escriba las siguientes líneas de


código

Puede verificar que se escribió correctamente la orden o función porque Visual FoxPro las marca de
color azul.
Visual FoxPro marca de color azul a todas las ordenes y funciones; de color Negro todas las variables
definidas por el usuario y palabras que no corresponden a un comando o función y de color verde los
comentarios (para asignar un comentario debe de iniciar la línea con un asterisco).

Analicemos las líneas de código:

SET DELETED ON
PUBLIC NUEVO
NUEVO = 0
CURSORSETPROP("BUFFERING",5,"ALUMNOS")
CURSORSETPROP("BUFFERING",5,"CALIFICACIONES")

En la primer línea se ocultan los registros marcados como borrados.

En la segunda línea se declaro una variable tipo publica llamada NUEVO la cual nos servirá en el
transcurso del proceso para saber si se agrega un nuevo registro en las tablas.

CORPORATIVO CETEC - SICASA 192


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

En la tercer línea se asigno el valor inicial de cero (0) para la variable NUEVO.

En la cuarta y quinta línea se configura la propiedad Buffering de CURSORSETPROP() para


determinar cómo realiza Visual FoxPro el bloqueo de registros y el almacenamiento de actualizaciones
en búfer (5 activa el almacenamiento optimista de tablas en búfer) esto nos permite realizar cambios
en las tablas ALUMNOS y CALIFICACIONES.

3. A continuación agregaremos el código correspondiente para los botones de comando


recién insertados.

1) De la lista de
objetos seleccione 2) Seleccione el
el control evento CLICK
cmdAGREGAR

Escriba las siguientes líneas de código en el evento CLICK del control cmdAGREGAR (botón
AGREGAR):
SET DELETED OFF
GO BOTTOM
PUBLIC CRED
CRED = ALUMNOS.CREDENCIAL + 1
APPEND BLANK IN 1
THISFORM.REFRESH
APPEND BLANK IN 2
THISFORM.PAGEFRAME1.PAGE1.TXTCREDENCIAL.VALUE = CRED
THISFORM.PAGEFRAME1.PAGE1.TXTNOMBRE.SETFOCUS
NUEVO = 1
THISFORM.CMDELIMINAR.ENABLED = .F.
SET DELETED ON

3) Escriba las
siguientes líneas
de código en el
evento CLICK
del control
cmdAGREGAR

CORPORATIVO CETEC - SICASA 193


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

Estas líneas de código se ejecutaran cuando le demos un clic en el botón AGREGAR del formulario, es
decir cuando queramos agregar un nuevo registro en las tablas de ALUMNOS y CALIFICACIONES.
Analicemos las líneas de código:

SET DELETED OFF: Se muestran los registros marcados como borrados, esto para no dar de alta una
credencial que ya existe.
GO BOTTOM: Se manda el apuntador al ultimo registro de la tabla.
PUBLIC CRED: se valida la variable CRED coomo publica.
CRED = ALUMNOS.CREDENCIAL + 1: Se asigna el siguiente numero de credencial en la variable
CRED a dar de alta.
APPEND BLANK IN 1: Se agrega un registro en blanco al final de la tabla ALUMNOS.
THISFORM.REFRESH: Se refresca el area de datos del formulario.
APPEND BLANK IN 2: Se agrega un registro en blanco al final de la tabla CALIFICACIONES.
THISFORM.PAGEFRAME1.PAGE1.TXTCREDENCIAL.VALUE = CRED : Se asigna al control
TXTCREDENCIAL en su propiedad value el valor de la variable CRED la cual guardo el numero de
credencial siguiente a dar de alta.
THISFORM.PAGEFRAME1.PAGE1.TXTNOMBRE.SETFOCUS: Se manda el foco al control
TXTNOMBRE para capturar el nombre del alumno a dar de alta.
NUEVO = 1: Se asigna el valor de 1 a la variable NUEVO.
THISFORM.CMDELIMINAR.ENABLED = .F.: Se deshabilita el botón ELIMINAR.
SET DELETED ON: Se vuelve a ocultar los registros marcadoa para eliminar.

1) Seleccione el
control
2) Seleccione el
cmdACEPTAR
evento CLICK

3) Agregue las siguientes líneas de código

Analicemos el código del botón ACEPTAR:

TABLEUPDATE(1)
SELECT 2
TABLEUPDATE(2)
NUEVO = 0
SELECT 1
THISFORM.CMDELIMINAR.ENABLED = .T.

En la primer línea se actualizan los cambios en la tabla ALUMNOS (área 1).


En la segunda línea se activa el área 2 (SELECT 2) correspondiente a la tabla CALIFICACIONES.
En la tercer línea se actualizan los cambios de la tabla CALIFICACIONES (área 2).
En la cuarta línea se vuelve asignar el valor de cero a la variable NUEVO.
En la quinta línea se activa la tabla ALUMNOS (SELECT 1).
En la sexta línea se vuelve a habilitar el botón Eliminar.

CORPORATIVO CETEC - SICASA 194


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

A continuación se agrega el código para el botón ELIMINAR.

1) Seleccione el 2) Seleccione el
control evento CLICK
cmdELIMINAR

3) Agregue las
siguientes líneas de
código

Analicemos las líneas de código del botón eliminar:

RES = MESSAGEBOX("ESTA SEGURO DE ELIMINAR EL REGISTRO?",4+32+256)


IF RES = 6 THEN
CURSORSETPROP("BUFFERING",1,"ALUMNOS")
CURSORSETPROP("BUFFERING",1,"CALIFICACIONES")
DELETE IN 1
DELETE IN 2
MESSAGEBOX("REGISTRO ELIMINADO...")
GO TOP
THISFORM.REFRESH
ENDIF
CURSORSETPROP("BUFFERING",5,"ALUMNOS")
CURSORSETPROP("BUFFERING",5,"CALIFICACIONES")

En la primer línea se despliega un mensaje en una ventana, con los botones Si y No (4), con un icono
de signo de interrogación (32) y al desplegarse el mensaje queda activo el segundo botón (256); al
momento de dar clic en el botón Si o botón No, su valor queda almacenado en la variable RES.

En la segunda línea se hace una condición de si el valor de la variable es igual a 6 (el 6 indica “Si”, o
que se dio un clic en el botón Si); si se cumple la condición se cambia la propiedad BUFFERING a 1
para poder marcar los registros de las tablas ALUMNOS Y CALIFICACIONES, y se marcan con el
comando DELETE (área 1 y área 2) y se despliega un mensaje de aviso de registro eliminado, se
manda el apuntador de registros al primer registro de la tabla, se refresca los datos del formulario y
finalmente se cierra la condición.

En las ultimas dos líneas se vuelve a establecer el modo de almacenamiento optimista para las dos
tablas de ALUMNOS y CALIFICACIONES esto para poder seguir actualizando las tablas.

CORPORATIVO CETEC - SICASA 195


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

Este es el código para el botón CANCELAR:

1) Seleccione el
control
cmdCANCELAR 2) Seleccione el
evento CLICK

3) Escriba estas dos líneas de código

Analicemos el código del botón CANCELAR:

TABLEREVERT(.T.)
THISFORM.REFRESH

En la primer línea se cancelan todos los cambios realizados en los registros de la tabla.

En la segunda línea vuelve a actualizar los datos del formulario.

En el botón SALIR agregue la siguiente línea de código.

1) Seleccione el
control
cmdSALIR
2) Seleccione el
evento CLICK

3) Escriba estas línea de código

Analicemos las líneas de código del botón SALIR.

TABLEREVERT(.T.): Descarta todos los cambios pendientes realizados en los registros de las tablas
ALUMNOS y CALIFICACIONES.

RELEASE WINDOWS MIFORMULARIO: Esta línea cierra la ventana con el nombre de


MIFORMULARIO.

CORPORATIVO CETEC - SICASA 196


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

4. Una vez que se agregó el código en los botones, agregaremos código en el evento CLICK
del PAGE2.

1) Seleccione el
objeto PAGE2

Escriba en las siguientes líneas de código en el evento CLICK de PAGE2.

THISFORM.REFRESH
IF NUEVO = 1 THEN
THISFORM.PAGEFRAME1.PAGE2.TXTCREDENCIAL.VALUE = CRED
THISFORM.PAGEFRAME1.PAGE2.TXTPARCIAL1.SETFOCUS
ENDIF

3) Escriba las siguientes líneas de código

Este código funciona de la siguiente manera:

CORPORATIVO CETEC - SICASA 197


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

Cuando demos un clic en el botón AGREGAR y se de un clic en la página de calificaciones se


asignara automáticamente el mismo número de credencial para la tabla CALIFICACIONES

Analicemos la orden:

THISFORM.REFRESH
IF NUEVO = 1 THEN
THISFORM.PAGEFRAME1.PAGE2.TXTCREDENCIAL.VALUE = CRED
THISFORM.PAGEFRAME1.PAGE2.TXTPARCIAL1.SETFOCUS
ENDIF

Se refrescan los datos en la página de Calificaciones.


Se hace una condición para saber si se esta agregando un registro nuevo, esto se sabe porque
cuando se da un clic en el botón AGREGAR se le da el valor de 1 a la variable NUEVO.

Observe el código que almaceno el botón AGREGAR:

SET DELETED OFF


GO BOTTOM
PUBLIC CRED
CRED = ALUMNOS.CREDENCIAL + 1
APPEND BLANK IN 1
THISFORM.REFRESH
APPEND BLANK IN 2
THISFORM.PAGEFRAME1.PAGE1.TXTCREDENCIAL.VALUE = CRED
THISFORM.PAGEFRAME1.PAGE1.TXTNOMBRE.SETFOCUS
NUEVO = 1
THISFORM.CMDELIMINAR.ENABLED = .F.
SET DELETED ON

Observe que cuando se da un clic en el botón


AGREGAR se asigna el valor de 1 a la variable
NUEVO

Esto que nos indica, que cuando el usuario de un clic en el botón Agregar y se registre un nuevo
alumno, la credencial de la tabla ALUMNOS sea la misma para la credencial de la tabla
CALIFICACIONES.

En la siguiente línea se almacena el valor que se escribió en el campo TXTCREDENCIAL en la


variable CRED.
THISFORM.PAGEFRAME1.PAGE2.TXTCREDENCIAL.VALUE = CRED
CORPORATIVO CETEC - SICASA 198
CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

En la siguiente línea se manda el foco al objeto TXTPARCIAL1 para aceptar la primer calificación.

THISFORM.PAGEFRAME1.PAGE2.TXTPARCIAL1.SETFOCUS

Observe que se especifica la dirección donde se encuentra el campo TXTCREDENCIAL:

THISFORM.PAGEFRAME1.PAGE2.TXTCREDENCIAL.VALUE

Nombre del marco de Propiedad donde se almacena


página PAGEFRAME1 el nuevo valor VALUE
Nombre de la
página donde se
encuentra el Nombre del campo
campo PAGE2 TXTCREDENCIAL

5. Como último paso cierre la ventana de código y regrese al diseño del formulario y cambie
la propiedad BufferMode a 2- Optimista.

1) De un clic
en cualquier
parte en
blanco del 2) Busque la
formulario o propiedad
en el título BufferMode y
para cámbiela a:
seleccionarlo 2- Optimista

3) Grabe los cambios realizados en


el formulario y ejecútelo

Recuerde que en
las tablas 1) De un clic en el
ALUMNOS y botón AGREGAR
CALIFICACIONES
solo tenemos 4
registros

CORPORATIVO CETEC - SICASA 199


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

Observe que el campo


Observe que se CREDENCIAL tiene
agrega ahora el foco
automáticamente el (SETFOCUS)
siguiente numero de
credencial a dar de
alta

Observe que el
botón eliminar
esta deshabilitado

Recuerde el código que se escribió en el botón AGREGAR en su evento CLICK.


Observe que si tenemos hasta el registro 4
SET DELETED OFF al incrementarle 1 nos da como resultado
GO BOTTOM el registro numero 5 que es el siguiente
PUBLIC CRED registro a dar de alta y el valor es
CRED = ALUMNOS.CREDENCIAL + 1 almacenado en la variable CRED
APPEND BLANK IN 1
THISFORM.REFRESH
APPEND BLANK IN 2
THISFORM.PAGEFRAME1.PAGE1.TXTCREDENCIAL.VALUE = CRED
THISFORM.PAGEFRAME1.PAGE1.TXTNOMBRE.SETFOCUS
NUEVO = 1
THISFORM.CMDELIMINAR.ENABLED = .F.
SET DELETED ON

2) Antes de
escribir el nombre
del alumno de un
clic en la página
CALIFICACIONES
para activarla

Recuerde que la variable NUEVO inicio con el valor de cero (0) y ahora cambia su valor a uno (1) el
cual nos va a servir en el trascurso del proceso para saber que se esta dando de alta un nuevo
registro.

CORPORATIVO CETEC - SICASA 200


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

Observe que se
agrego
automáticamente
la credencial 5
para registrar sus
calificaciones y el
campo PARCIAL1
Tiene en estos
momentos el foco

Observe el código que se escribió en PAGE2 en el evento CLICK:

THISFORM.REFRESH
IF NUEVO = 1 THEN
THISFORM.PAGEFRAME1.PAGE2.TXTCREDENCIAL.VALUE = CRED
THISFORM.PAGEFRAME1.PAGE2.TXTPARCIAL1.SETFOCUS
ENDIF
Observe como en la tercer línea se asigna el valor de la variable CRED al control TXTCREDENCIAL
que se localiza en la página PAGE2 (calificaciones).

THISFORM.PAGEFRAME1.PAGE2.TXTCREDENCIAL.VALUE = CRED

Y en la cuarta línea se escribió el siguiente código:

THISFORM.PAGEFRAME1.PAGE2.TXTPARCIAL1.SETFOCUS

Es por eso que el control TXTPARCIAL1 tiene el foco.

Observe con detalle el papel que juega la variable NUEVO es decir que sólo asignara el valor al
control TXTCREDENCIAL y mandara el foco a al control TXTPARCIAL1 cuando se este dando de alta
un nuevo registro, y eso lo sabrá el programa por el valor de la variable NUEVO, es decir que cuando
tenga el valor de 1 indica que se esta dando de alta un nuevo registro (recuerde que la variable inicio
con el valor de cero (0).

6) una vez que


5) De un clic en la termino de escribir
página DATOS los datos del
DEL ALUMNO y alumno de un clic
termine de en la página
agregar los datos CALIFICACIONES
del alumno y registre sus
calificaciones del
alumno

CORPORATIVO CETEC - SICASA 201


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

7) Al terminar de
registrar las
calificaciones del
alumno de un clic
en el botón
ACEPTAR para
almacenar los
datos del alumno
y sus
calificaciones

Observe el código que se escribió en el botón ACEPTAR en su evento CLICK:

TABLEUPDATE(1)
SELECT 2
TABLEUPDATE(2)
NUEVO = 0
SELECT 1

Recuerde que la función TABLEUPDATE() graba los cambios realizados en una tabla.
Observe que al actualizar los cambios en las tablas se vuelve a asignar su valor de cero (0) a la
variable NUEVO y volverá a tener el valor de uno (1) solo cuando se de un clic nuevamente en el
botón AGREGAR y se vuelva a dar de alta otro registro.

El formulario permitirá también realizar modificaciones en los registros que ya existen en las tablas
tanto en los datos del alumno como en sus calificaciones.

1) De un clic en
el botón INICIO
para
desplazarnos al
primer registro
de la tabla

CORPORATIVO CETEC - SICASA 202


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

5) Por último de
un clic en el
botón Aceptar
2) Cambie los para actualizar
apellidos del la tabla con los
alumno nuevos cambios

4) Cambie el turno
3) Cambie el grupo

6) De un clic en el
botón ULTIMO para
desplazarse hasta el
último registro de la
tabla

7) Vuelva a dar un clic en el botón


INICIO para regresar al primer registro

Observe que los


cambios realizados
permanecen; con
esto comprobamos
que si se aceptaron
los cambios en el
registro

Enseguida comprobaremos la función del botón CANCELAR.

CORPORATIVO CETEC - SICASA 203


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

1) Estando en el
primer registro de la
tabla nuevamente
cambie los apellidos
del alumno 5) De un clic en el
botón CANCELAR

2) Cambie 3) Cambie el 4) Cambie el


su Edad Grupo Turno

Observe que vuelven a


aparecer los datos
originales del alumno

Recuerde el código que se escribió en el botón CANCELAR en su evento CLICK:

TABLEREVERT(.T.)
THISFORM.REFRESH

La función TABLEREVERT() Descarta los cambios realizados en una fila o en una tabla.
Ahora analicemos como funciona el botón BORRAR.

Ubíquese en el
primer registro
1) Estando en el
de la tabla
primer registro de un
clic en el botón
ELIMINAR

2) De un clic en el botón Si (observe que el


botón “No” tiene el foco) para marcar el registro

CORPORATIVO CETEC - SICASA 204


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

Observe que se
despliega el mensaje
“REGISTRO
ELIMINADO” de un
clic en el botón
Aceptar

Realmente el registro no se elimina físicamente en el disco, solo se marca como registro para ser
eliminado.

Observe el código que se escribió en el botón ELIMINAR.

RES = MESSAGEBOX("ESTA SEGURO DE ELIMINAR EL REGISTRO?",4+32+256)


IF RES = 6 THEN
CURSORSETPROP("BUFFERING",1,"ALUMNOS")
CURSORSETPROP("BUFFERING",1,"CALIFICACIONES")
DELETE IN 1
DELETE IN 2
MESSAGEBOX("REGISTRO ELIMINADO...")
ENDIF
CURSORSETPROP("BUFFERING",5,"ALUMNOS")
CURSORSETPROP("BUFFERING",5,"CALIFICACIONES")

La orden para marcar un registro es DELETE.

Abra la tabla ALUMNOS en modo examinar y observe la marca que se agrego en el primer registro de
la tabla.

3) Abra el menú
Ver y seleccione
Examinar para
abrir la ventana
Examinar

CORPORATIVO CETEC - SICASA 205


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

4) De un clic en el
último registro
para poder ver la
marca

Observe la marca que 5) Cierre la ventana de


asigno el comando examinar
DELETE

Para borrar físicamente los registros utilice la opción Quitar registros eliminados del menú Tabla.

6) De un clic en el
botón ULTIMO

6) Ahora de un clic en el botón


INICIO para regresar al primer
registro
CORPORATIVO CETEC - SICASA 206
CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

Observe que ya no
se muestra el primer
registro

SET DELETED especifica si Visual FoxPro procesará o no los registros marcados para su eliminación
y si están disponibles o no para su uso en otros comandos.
Sintaxis

SET DELETED ON | OFF

Argumentos:

ON

Especifica que los comandos que realizan operaciones sobre registros (incluyendo los registros de las
tablas relacionadas) utilizando un alcance pasan por alto los registros marcados para su eliminación.

OFF

(Predeterminado) Especifica que a los registros marcados para su eliminación se puede acceder
mediante comandos que operan sobre registros (incluyendo los registros de las tablas relacionadas)
utilizando un alcance.

CORPORATIVO CETEC - SICASA 207


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

CORRIGIENDO ERRORES

Probablemente cuando ejecuté el formulario se desplegara un mensaje de error como se muestra en la


siguiente figura; y si intenta volver a ejecutarlo volverá a mostrar el mismo mensaje.

Este error es ocasionado por que se hizo un cambio en los registros y se cerro el formulario sin
grabarlos o aceptar los cambios (botón Aceptar) o cancelarlos (botón Cancelar).

El error puede ser solucionado de las siguientes formas:

1. Cerrar el formulario y cerrar la base de datos desde la ventana de Comandos utilizando la orden
CLOSE ALL.

Después de cerrar la
base de datos,
Escriba la orden CLOSE
ubíquese sobre la
línea OPEN ALL desde la ventana de
DATABASE y oprima comando para cerrar la
base de datos y después
Enter para volver a
abrir la base de datos vuelva a abrirla junto con
el formulario

Ubíquese sobre la línea


MODIFY FORM para abrir
el diseño del formulario

2. Agregar la orden TABLEREVERT(.T.) en el evento DESTROY del formulario.

Escriba la orden
TABLEREVERT(.T.) en el
evento DESTROY del
formulario

3. Cambiar la propiedad CLOSABLE del formulario por .F. Falso.


Al cambiar la propiedad
CLOSABLE a .F. FALSO, no
podrá cerrar el formulario desde
el botón que se localiza en la
esquina superior derecha ya que
se encontrará deshabilitado y
tendrá que cerrarlo
forzosamente desde el botón
SALIR el cual debe contener la
orden TABLEREVERT(.T.)

CORPORATIVO CETEC - SICASA 208


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

MEJORANDO EL ASPECTO DEL FORMULARIO

En la siguiente practica cambiaremos la aceptación de los datos GRUPO y TURNO; hasta ahora se
han estado aceptando los datos escribiéndolos desde el teclado, sin embargo es mucho más fácil y
además nos ahorra tiempo en el proceso de la información seleccionarlos que escribirlos; para esto
nos auxiliaremos del control Cuadro combinado el cual por medio de una lista de elementos nos
permitirá realizar el dato que almacenaran los campos GRUPO y TURNO.

 PRÁCTICA

1. Abra la base de datos EJEMPLO y su formulario PAGINAS; una vez encontrándose en el


modo diseño del formulario realice los siguiente.

1) De un clic con
el botón derecho
del mouse sobre
el Marco de
páginas y del
menú contextual
seleccione
Modificar

Observe el
contorno azul
alrededor del Recuerde que para
borrar un control u
Marco de página
el cual indica que objeto solo tiene que
se encuentra en seleccionarlo y
después presionar la
modo Modificar
tecla Suprimir

2) Borre el campo GRUPO 3) Borre el campo TURNO

CORPORATIVO CETEC - SICASA 209


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

Insertaremos un
cuadro combinado
para aceptar el
Grupo

3) De un clic en el
botón Bloqueo
del generador
para activarlo o
verifique que este
activado

4) Seleccione con un clic el 5) Abra un área para insertar el cuadro combinado


cuadro combinado en el formulario al lado de la etiqueta Grupo

Observe que se
abre la ventana Recuerde que esta
Generador de ventana solo se abre
cuadros si el botón Bloqueo
combinados del generador se
encuentra activado

6) De un clic en el botón
para mostrar la lista
plegable y seleccione
Datos introducidos
manualmente

CORPORATIVO CETEC - SICASA 210


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

7) Escriba como
grupos: A, B, C
yD

8) De un clic en
la página Estilo
para activarla

9) De un clic en la
opción Lista
desplegable para
seleccionarla

10) De un clic en la
página Valor

11) Abra la lista de


campos y
seleccione:
Alumnos.Grupo que
es el campo donde
se almacenará el
valor que
seleccionemos

CORPORATIVO CETEC - SICASA 211


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

12) Para finalizar de


crear el cuadro
combinado de un clic
en el botón Aceptar

13) Agregue otro cuadro combinado para aceptar el


turno del alumno (insértelo al lado de la etiqueta turno)

14) Abra la lista y


seleccione: Datos
introducidos
manualmente

15) Escriba como lista de elementos:


MATUTINO y VESPERTINO

CORPORATIVO CETEC - SICASA 212


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

16) De un clic en la página


Estilo y seleccione la
opción: Lista desplegable

17) De un clic en la
página Distribución y
amplié con el mouse la
columna para mostrar
los datos de la lista
(similar como lo hace
con una columna de
Excel)

18) De un clic en la
página Valor y abra la
lista de campos y
seleccione el campo:
Alumnos.Turno

19) De un clic en el
botón Aceptar para
finalizar

CORPORATIVO CETEC - SICASA 213


CAPÍTULO 6 MANTENIMIENTO DE DATOS DESDE UN FORMULARIO VISUAL FOXPRO

20) Grabe Los


cambios realizados
del formulario

Acomode sus controles etiquetas en


el marco de páginas

21) Ejecute el formulario y de un clic en el botón 22) De un clic en el cuadro


del cuadro combinado para ver sus valores combinado Turno y vea sus valores

Recuerde que si quiere cambiar algún dato de un alumno tendrá que dar un clic en el botón ACEPTAR
ya que si hace algún cambio e inmediatamente da un clic en el botón salir no se reconocerán los
cambios realizados.

CORPORATIVO CETEC - SICASA 214

También podría gustarte