Programación Multiusuario

4
Programación Multiusuario: En la forma Automática, Fox controla la zona critica con los enllavamientos automáticos, lo que nos ahorra tiempo ya que no tenemos que preocuparnos por ello. ( esta es la forma que utilizaremos ) ¿Qué se requiere? Se requiere algunas definir variables de ambiente en el programa principal de nuestro Sistema: * Definición de para Ambiente Red SET EXCLUSIVE OFF Abre las tablas en modo compartido SET MULTILOCKS ON Para que se puedan bloquear mas de un registro SET DELETE ON Para que los registros marcados no se visualicen SET REFRESH TO 5 Refrescamiento cada 5 segundos en el Browse SET REPROCESS TO AUTOMATIC Si un registro esta bloqueado o enllavado Fox intenta acualizarlo basta que uno presione ese *SET REPROCESS TO 5 SECONDS Si después de 5 segundos no puede actualizarlo Fox manda un error. * Otro Ambiente SET ECHO OFF SET TALK OFF SET CENTURY ON SET CLOCK STATUS SET DATE BRIT SET PATHTOmenu,forms,bmp,prg,data SET SAFETY OFF SET PROCEDURE TO .\prg\utility Usando el Buffer con las tablas. Buffer Optimista: Dos usuarios pueden estar modificando el registro sin ningún problema. Pesimista : Solo un usuario puede estar modificando el registro. ¿Cómo fijar el Buffer? Fijar el Modo de Buffer y almacenar el resultado lógico en ISuccess lSuccess = CURSORSETPROPC'Buffering", 5, "customer") IFlSuccess = .T. =MESSAGEBOX("Operación Realizada.!",o," Status de la Operación ") ELSE =MESSAGEBOX("OperaciónNo Realizada.!",o," Status de la Operación ") ENDIF Para ver el gráfico seleccione la opción "Descargar" Con el buffer activado podemos hacer uso de los comandos : TABLEREVERT(.T.) TABLEUPDATE(.T.) TABLEUPDATE(.T.) Graba los cambios hechos en la tabla. SET MULTILOCKS ON && Debe estar ON para el buffering de la tabla = CURSORSETPROPCBuffering', 5, 'employee' ) && Activar el Buffering de la Tabla INSERTINTO employee (cLastName) VALÚES ('Smith') CLEAR ? Valor Original de cLastName : ' ?? cLastName && muestra valor actual de cLastName (Smith) REPLACE cLastName WITH 'Jones' ? 'Nuevo valor para cLastName : ' ?? cLastName && Muestra Nuevo valor de cLastName (Jones) = TABLEUPDATE(.T.)&& Acepta los cambios

Transcript of Programación Multiusuario

Page 1: Programación Multiusuario

Programación Multiusuario:En la forma Automática, Fox controla la zona critica con los enllavamientos automáticos, lo que nos ahorra tiempo ya que no tenemos que preocuparnos por ello. ( esta es la forma que utilizaremos )¿Qué se requiere?Se requiere algunas definir variables de ambiente en el programa principal de nuestro Sistema:* Definición de para Ambiente RedSET EXCLUSIVE OFF Abre las tablas en modo compartidoSET MULTILOCKS ON Para que se puedan bloquear mas de un registroSET DELETE ON Para que los registros marcados no se visualicenSET REFRESH TO 5 Refrescamiento cada 5 segundos en el BrowseSET REPROCESS TO AUTOMATIC Si un registro esta bloqueado o enllavadoFox intenta acualizarlo basta que uno presione ese*SET REPROCESS TO 5 SECONDS Si después de 5 segundos no puede actualizarlo Fox manda un error.* Otro Ambiente SET ECHO OFF SET TALK OFF SET CENTURY ON SET CLOCK STATUS SET DATE BRITSET PATHTOmenu,forms,bmp,prg,dataSET SAFETY OFFSET PROCEDURE TO .\prg\utilityUsando el Buffer con las tablas.Buffer Optimista: Dos usuarios pueden estar modificando el registro sin ningún problema.Pesimista : Solo un usuario puede estar modificando el registro.¿Cómo fijar el Buffer?

Fijar el Modo de Buffer y almacenar el resultado lógico en ISuccess lSuccess = CURSORSETPROPC'Buffering", 5, "customer")

IFlSuccess = .T. =MESSAGEBOX("Operación Realizada.!",o," Status de la Operación ")ELSE =MESSAGEBOX("OperaciónNo Realizada.!",o," Status de la Operación ")ENDIFPara ver el gráfico seleccione la opción "Descargar"Con el buffer activado podemos hacer uso de los comandos :TABLEREVERT(.T.)TABLEUPDATE(.T.)TABLEUPDATE(.T.)Graba los cambios hechos en la tabla.SET MULTILOCKS ON && Debe estar ON para el buffering de la tabla= CURSORSETPROPCBuffering', 5, 'employee' ) && Activar el Buffering de la TablaINSERTINTO employee (cLastName) VALÚES ('Smith')CLEAR? Valor Original de cLastName : '?? cLastName && muestra valor actual de cLastName (Smith)REPLACE cLastName WITH 'Jones'? 'Nuevo valor para cLastName : '?? cLastName && Muestra Nuevo valor de cLastName (Jones)= TABLEUPDATE(.T.)&& Acepta los cambios? Valor actualizado de cLastName : '?? cLastName && Muestra actual valor de cLastName (Jones)TABLEREVERT (.t.)Cancela los cambios hechos a la tablaUSE Customer && Abre la tabla Customer= CURSORSETPROPCBuffering', 5, 'customer') && Activa el buffering de la tablaCLEAR? Valor Original cust_id : '?? cust_id && Muestra el actual valor de cust_idREPLACE cust_id WITH '***' && Cambia el contenido del registro? 'Nuevo valor de cust_id : '?? cust_id && muestra Nuevo valor de cust_id (***)= TABLEREVERT(.T.) && Deshace todos los cambios en la tabla? Valor de cust_id revertido: '

Page 2: Programación Multiusuario

Botón Incluir:if thisform.incluir.caption="Incluir"scatter memvar blankthisform. incluir .caption="Guardar"thisform. salir. caption="Cancelar"thisform. texti.enabled=.t. (Recuerden que los texbox poseen nombres que secorresponden conia realidad txtcedula,txtnombre...,aunque en este ejemplo no se planteen así debepro gru Triarse)thisf orm. text2.enabled=.t.thisf orm. text3 .enabled=.t.thisf orm. text4 .enabled= .t.elseif thisf orm. texti .valué <> "if thisf orm. text2.v alueo "if thisf orm. text3 .v alueo "if thisf orm, text4. value< > "append blankgather memvarendif (Pueden mostrarse mensajes de validación de llenar todoslos campos antes de incluir un registro)endifendifendifthisform. incluir. caption="incluir"thisfoirnsalir. caption="Salir"thisf orm. text2.enabled=.f.thisf orm. text3 .enabled=.f.thisf orm. text4 .enabled= .f.endifthisform.refreshBotón Modificar:if thisf orm.modificar. caption="Modificar "thisform.texti.enabled=.f.thisf orm. text2.enabled=.t.thisf orm. tex 13.enabled=.t.thisf orm. text4 .enabled=.t.thisform.modificar. captio n="Guardar "thisform. salir. caption="Cnacelar"elsegather memvarthisf orm. texti. enabled= .t.thisf orm. text2.enabled=.f.thisf orm. text3 .enabled=.f.thisf orm. text4 .enabled= .f.thisform. modificar, captia n="Modificarthisf orm. salir. caption="Salir "endifBoton Eliminar (Recuerden que en la ayuda de Visual FoxPro está la información de la aplicación de la función y/o procedimiento Messageb if messagebox("Esta seguro que desea eliminar este ckente",36,"CoiMTrmacicra")=6 (Implementada como función)deletepackmessageboxC'El registro fue eliminado",o,"Aviso")(implementada como procedimiento)scatter memvar blankendifthisform.refresh

Page 3: Programación Multiusuario

Boton Salir:if thisform.incluir. captìon=" Guardar"thisf orm. text2.enabled=.f.thisf orm. text3 .enabled=.f.thisf orm. text4 .enabled= .f.thisform.incluir. caption="Incluir"thisfornuSalir. captio n="Salir"elseif thisform.modificar.caption="Guardar"thisf orm. texti. enabled= .t.thisf orm. text2.enabled=.f.thisf orm. text3 .enabled=.f.thisf orm. text4 .enabled= .f.thisform.modificar. captio n="Modificar"thisforrnSalir. captio n="Salir"elsethisform.releaseendifendifBotón Primero:gotopm.codìgo=clientes.codigom.nombre=clientes.nombrem.telefono=clientes.telefonom.direceion=clientes.direcciónthisform.refreshBoton Ultimo:go bottomm.codigo=clientes.codigom.nombre=clientes.nombrem.telefono=clientes.telefonom.direccion=clientes.direccionthisform.refreshBoton SiguienteifeofOthisform.siguiente.enabled=.f.go bottomm.codigo=clientes.codigom.nombre=clientes.nombrem.telefono=clientes.telefonom.direccion=clientes.direcciónfrmactcliente.refreshelseskipim.codigo=clientes.codigom.nombre=clientes.nombrem.telefono=clientes.telefonom.direccion=clientes.direccionifthisform.anterior.enabled=.f.thisform.anterior.enabled=.t.endifendifthisform.refresliBoton AnteriorifbofOthisform.anterior.enabled=.f.gotopelseskip -1

Page 4: Programación Multiusuario

ifthisform.siguiente.enabled=.f.thisform.siguiente.enabled=.t.endifendifm.codigo=clientes.códigom.nombre=clientes.nombrem.telefono=clientes.telefonom.direccion=clientes.direccionthisform.refresli