Clipper/FiveWin - ESCRIBIR DO AL MISMO TIEMPO EN UNA DBF

 
Vista:

ESCRIBIR DO AL MISMO TIEMPO EN UNA DBF

Publicado por ANTONIO MENENDEZ RUIZ (222 intervenciones) el 08/12/2006 19:17:48
Hola amigos:
Tengo un programa que va cargando registros en una base de datos en un pc, el mismo programa en red en otro pc en otra base de datos igual pero con otro nombre, cada x tiempo cada una vuelca el contenido en otra general y en un momento puede coincidir que las dos esta volcando registros al mismo tiempo en la general, yo tengo la precaucion de bloquear despues del append blank, y una ves añadidos los registros desbloquear, ¿podria dar problemas?
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ESCRIBIR DO AL MISMO TIEMPO EN UNA DBF

Publicado por leandro alfonso (121 intervenciones) el 08/12/2006 20:14:15
El unico problema puede ser que no abras el mismo indice y que los indices esten creados de manera diferente. De restro no creo que tengas problemas

Saludos

LEANDRO ALFONSO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ESCRIBIR DO AL MISMO TIEMPO EN UNA DBF

Publicado por Raul (44 intervenciones) el 09/12/2006 00:03:49
Si utilizas bien el bloqueo y el desbloqueo, no deberías tener problemas.

Otra alternativa que tienes es usar el FLOCK() o el USE ... EXCLUSIVE para el archivo que pretendes actualizar, de ésta manera mientras se hace un proceso de actualización desde una PC, no te permitirá actualizarlo desde otra pc.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ESCRIBIR DO AL MISMO TIEMPO EN UNA DBF

Publicado por ANTONIO (222 intervenciones) el 09/12/2006 11:27:04
Gracias por contestar:
cada pc tiene un fichero particular1.dbf y particular2.dbf donde se cargan las compras, pero a la hora de emitir el tiquek, cada uno de los ficheros descarga sobre el general.dbf, lo pongo asi:

select 1
use particular1 &&desde el pc1 desde el dos particular2.dbf
wa=a
select 2
use general
append blank
do bloqueo
replace a with wa
unlock
*******
procedure bloqueo
bloquea el registro
return
*******

supongo que asi estara bien ¿no?

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ESCRIBIR DO AL MISMO TIEMPO EN UNA DBF

Publicado por El Duro (19 intervenciones) el 09/12/2006 16:10:15
Antonio:

En principio creo que no debes tener problema con el código, peroooo........ puede ser que tengas un "hoyo" en tu código, a que me refiero ?

Que va a suceder si el PROCEDURE Bloqueo no puede bloquear el registro agregado ?, cómo lo vas a saber ?, que vas a hacer en caso de no poder bloquear el registro ?

Creo que lo más indicado es que en lugar de PROCEDURE uses una FUNCTION
que te devuelva el resultado de si se pudo bloquear el registro o no y como resultado será el camino a seguir.

El Duro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ESCRIBIR DO AL MISMO TIEMPO EN UNA DBF

Publicado por Raúl (44 intervenciones) el 09/12/2006 17:16:44
Antonio:
Es verdad lo que plantea El Duro, puede ser que tu APPEND BLANK no se pueda ejecutar y en ese caso tu proceso fallaría.
Otra, si el APPEND BLANK funciona correctamente, no es necesario que bloquees el registro porque al APPEND BLANK ya lo retiene.

Yo usaría algo más o menos así:

IF ALTA_REG(10)
... cargo campos del registro..
else
Mensaje("NO SE PUEDE AGREGAR EL REGISTRO..")
Endif

Function ALTA_REG(nSegundos)
*---------------------------------------------
Local EstaOK:=.F.
DO WHILE .T.
DBAPPEND()
IF !NETERR() // Si no hay error en el APPEND BLANK
EstaOK:=.T.
EXIT // Salgo con .T.
Endif
DO WHILE nSegundos > 0 // Sigo intentando nSegundos
DBAPPEND()
IF !NETERR() // Si no hay error en el APPEND BLANK
EstaOK:=.T.
EXIT // Salgo con .T.
Endif
INKEY(.5) // Espera 1/2 segundo p/volver a intentar
nSegundos -= .5
ENDDO
ENDDO
Return EstaOK
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ESCRIBIR DO AL MISMO TIEMPO EN UNA DBF

Publicado por Marcelo (218 intervenciones) el 11/12/2006 19:55:33
Otra cosa, antes de hacer el unlock, ejecuta un DBcommit(), para forzar a qu ela info se grabe en la tabla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ESCRIBIR DO AL MISMO TIEMPO EN UNA DBF

Publicado por ANTONIO (222 intervenciones) el 12/12/2006 12:04:15
Gracias a todos por contestar y aclararme con tanto detalle.
gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar