Tablas libres en Red

Visto 61 veces
Saltar al primer mensaje no leído

MartinS

no leída,
4 nov 2010, 9:11:394/11/10
a Comunidad de Visual Foxpro en Español
Buenas a todos

Lo que pasa que desde hace mucho tiempo estoy con la duda
tengo un punto de venta para comida rapida y desearia que orientaran
para usar las tablas libres en red.

Tengo el siguiente codigo.

***** en el load de un formulario hago lo siguiete :

set exclu off
use clientes in 0 shared
use ven_gral in 0 shared
use detalles in 0 shared

****** en un boton de otro formulario de facturacion hago lo
siguiente:


SELECT Clientes
Ctabla = ALIAS()
Lsepudo = .f.
DO WHILE NOT Lsepudo
IF FLOCK(Ctabla)
*** aki va el codigo de insercion de datos
UNLOCK IN &ctabla
Lsepudo = .t.
ELSE
LOOP
ENDIF
ENDDO

Esta bien si uso el flock dentro del Do While ?

Gracias por su atencion.

extremo

no leída,
4 nov 2010, 9:52:084/11/10
a Comunidad de Visual Foxpro en Español
Esta bien que lo uses dentro del do while porque dentro del do while
estas desbloqueando, pero.... como la instruccion flock() bloquea la
tabla yo lo dejaria antes del do while y despues del do while haria
unlock().Pero si en vez de flock() usaras rlock() entonces estaria
bien ya que rlock() bloquea registros.

Bendiciones

Oscar Díaz

no leída,
4 nov 2010, 10:22:114/11/10
a publice...@googlegroups.com
Estimado Martín:
 
Cuando uso tablas nativas, yo lo hago así:
 
  do while !flock(Ctabla)
  enddo
*  aqui va el codigo de insercion de datos o de actualizacion
  unlock in &Ctabla
 
Saludos desde Bogotá.co

GeoSys Diseño de Software

no leída,
4 nov 2010, 10:36:164/11/10
a publice...@googlegroups.com
select archifac
set reprocess to 10 seconds && Intento bloquear solo por 10 segundos
if .not. flock() && Si no logré bloquear en 10 segundos.
    store "SI" to bloqueada1 && Asigno "SI" a la variable bloqueada1 para saber en el formulario pagofactu.
    titulo="OTRO USUARIO ESTÁ ACUALIZANDO ESTE ARCHIVO"
    messagebox("Otro usuario está actualizando el archivo ARCHIFAC vuelva a intentar nuevamente.", 16, titulo)
    select factura && Vuelvo a mi tabla predeterminada.
    thisform.grid1.setfocus
    unlock all
    return && Salgo del procedimiento.
endif

Pero es mejor como dice el colega extremo, puedes bloquear el encabezado de la tabla con rlock

select archifac
set order to 1 && Ordeno por número de factura.
rlock("0", "archifac") && Bloqueo el encabezado de la tabla.
*Insertas luego desbloqueas.
unlock && Desbloqueo el encabezado de la tabla.

Para actualizar registros es mejor utilizar rlock para que el proceso sea más fluido y no bloquear toda la tabla con flock.
Ejempo:

   seek codiexiste
   rlock() && Bloqueo el registro encontrado.
* actualizo el registro.  
unlock && Libero del bloqueo el registro.


Anthony Contreras Peralta

Costa Rica

ibania blanco

no leída,
5 nov 2010, 11:12:245/11/10
a Comunidad de Visual Foxpro en Español
yo lo hago asi

encabezado
if not rlock() and (diferente de nueva factura)
loop
endif)

detalle
sele mitabla
appen blank
if rlock()
repl next 1 fecha with m.fecha, mas reemplazos
unlock
endif

extremo

no leída,
5 nov 2010, 11:38:065/11/10
a Comunidad de Visual Foxpro en Español
bueno, yo trabajo de un manera muy diferente.

Yo siempre mantengo mis tablas cerradas y las abro solamente para
hacer consulta o para realizar una grabacion, una vez hecha la accion
cierro. Ahora como hago para mostrar informacion cabeza-detalle de
varias facturas por ejemplo, realizo una consulta a la o las tablas y
el resultado los envio a mis cursores de trabajo, luego el formulario
trabaja solamente con los cursores, pero las tablas estan cerradas, y
para hacer la actualizacion lo mismo, ejemplo

use fact in 0
use fact_det in 0
update fact set campos where id_fact = micursorFact.id_fact
sele micursorFact_det
delete fact_det where id_fact = micursorFact_det.id_fact
scan
scat memvar memo
insert into fact_det frommemvar
endsca
use in fact
use in fact_det


Bendiciones

Responder a todos
Responder al autor
Reenviar
0 mensajes nuevos