FoxPro/Visual FoxPro - Tablas DBF compartidas en RED

 
Vista:

Tablas DBF compartidas en RED

Publicado por Rusculleda (1 intervención) el 14/06/2011 14:04:48
Hola, antes que nada aclaro que estoy dando mis primeros pasos en la programación para acceso compartido con vfp y les quería consular por lo siguiente:
Tengo una computadora con un sistema que abre tablas dbf ubicadas fisicamente en otra pc.
Un módulo de este sistema se usa para realizar cobranzas, tomando datos de clientes.dbf, obteniendo los nros de recibos de numerador.dbf y grabando las cobranzas en registro.dbf.

Solo UNA pc ejecuta este módulo.

En ocasiones , al cargar un cobro, se emite el recibo con un nro. pero el mismo
no se graba en registro.dbf (esto se verifica luego al consultar la cuenta del cliente).


¿Podrian darme alguna idea para poder dar una solución a este problema?

1. Se accede a los clientes por medio de una instruccion sql y se los visualiza en un grid.
2. Por medio de otra sent. sql se visualizan los pagos del cliente seleccionado.
3. Se cargan los datos del pago (fechas, conceptos, montos, etc).
4. Se obtiene el nro de recibo

nNroCompro = NUMERADOR.NROCOMPRO
REPLACE NUMERADOR.NROCOMPRO WITH nNroCompro + 1
UNLOCK

****ES NECESARIO REALIZAR UN RLOCK ANTES DEL REPLACE?
****SE REQUIERE EL COMANDO FLUSH?

5. Se graba el cobro en registro.dbf
SELECT REGISTRO
APPEND BLANK
****luego los replaces....

6. Se imprime el recibo tomando los datos del registro grabado.

7. Se ejecuta nuevamente la sent. SQL del paso 2. para actualizar el grid Y ES AQUI en donde se presenta el problema mencionado ya que no me muestra el nuevo pago. ESTO SOLO OCURRE EN ALGUNAS OCASIONES. He consultado manualmente la tabla registro.dbf y efectivamente el recibo impreso no aparece.

Alguna idea?

MUCHAS GRACIAS !

Rusculleda.
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

Tablas DBF compartidas en RED

Publicado por jose camilo (805 intervenciones) el 14/06/2011 15:44:28
en mi sistema sigo la siguiente logica (trabajo en sql server)
1.- seleciono el numero y lo incremento en uno
2.- lo mando grabar y si grabo adecuadamente entonces le agrego los pagos en recibo de ingreso
Tomo en cuenta que el numero que presento en pantalla no necesariamente es el mumero real
ya que al momento de grabar es que busco el numero definitivo solo por si otro usuario ya
grabo un recibo de ingreso.

3.- grabo todos los datos de pagos
4.- cargo el recibo otra vez
5.- mando a imprimir el recibo que carge
como puedes notar lo que hago es reimprimir el recibo por lo que solo imprimo lo que
realmente tengo en la base de datos. lo mismo hago para las facturas y demas documentos.
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

Tablas DBF compartidas en RED

Publicado por ANTONIO PATIÑO MENDEZ (60 intervenciones) el 14/06/2011 23:06:29
un dato importante que no mencionas es de que tamaño es tu red esto cuantas pc estan funcionando como terminales , accesando la base de datos compartida y cuantas transacciones se dan por hora en la hora pico de las operaciones realizadas.
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
sin imagen de perfil

Tablas DBF compartidas en RED

Publicado por Juan Manuel Cruz (512 intervenciones) el 15/06/2011 11:01:00
A tener en cuenta:

1. Con la técnica del registro numerador SIEMPRE debes hacer un rlock previo y manejar la excepción de que no haya podido bloquearse (informar al usuario y reintentar, por ejemplo)

2. Verfifica cómo está configurada tu sesión de datos. El BufferMode podría perfectamente estar en 0 (que no hace buffering alguno) así que los cambios se graban de inmediato, o antes si usas el FLUSH. Lee un poco la documentación acerca del modo 3 y 5, que son los casos donde deberías hacer TableUpdate() (o TableRevert() si quieres deshacer lo hecho)
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

Tablas DBF compartidas en RED

Publicado por jose camilo (805 intervenciones) el 14/06/2011 15:48:16
perdona con relacion al comando rlock en dbf casi siempre es lo mejor, pero debes tomas en cuenta chequear si esta lock o no antes de intenter grabar
el comando flush es necesario solo al final del proceso de grabacion para que te force el bajado de los datos al disco
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

Tablas DBF compartidas en RED

Publicado por Rusculleda (4 intervenciones) el 15/06/2011 19:39:24
Juan Manuel: perdón cuando te refieres a sesión de datos, te refieres al entorno de datos de un form?
Gracias por tus comentarios. Son simpre bienvenidos.

Saludos.
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

Tablas DBF compartidas en RED

Publicado por Rusculleda (4 intervenciones) el 15/06/2011 19:41:20
Juan Manuel: no tengo tablas en el entorno de datos de mis forms. Abro las tablas desde el prg principal.

Saludos.
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

Tablas DBF compartidas en RED

Publicado por Resculleda (1 intervención) el 14/06/2011 22:15:00
Gracias Camilo por tu tiempo. Aun no he dado con la solución. Sigo buscando.

Saludos
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

Tablas DBF compartidas en RED

Publicado por alberto (404 intervenciones) el 15/06/2011 02:05:37
Yo he experimentado algunas veces que cuando grababa en un entorno en red , si no usaba el tableupdate , aveces no se grababan los datos en las dbf , la solucion el el entorno de datos puse buffermode de la tabla en 5 y cuando grabo uso estos comandos :

*------------------
* CARGO CTA CTE
*-------------------
SELECT CTACTEC
GO BOTTOM
APPEND BLANK
=rlock()
REPLA NROCLI WITH THISFORM.Pageframe1.Page1.Text3.VALUE
REPLA DEBE WITH THISFORM.Pageframe1.Page1.TxtImporteTotal.VALUE
REPLA SUBTOTAL WITH THISFORM.Pageframe1.Page1.TxtImporteTotal.VALUE
* REPLA NROFAC WITH "F"+TP+"-"+transform(STR(C,8)
REPLA NROFAC WITH "F"+TP+"-"+transform(C,"@rl 99999999")
REPLA FECHA WITH THISFORM.Pageframe1.Page1.TxtFec_venta.VALUE
do case
case THISFORM.Pageframe1.Page1.combo1.listindex=1
REPLA VENCE WITH THISFORM.Pageframe1.Page1.TxtFec_venta.VALUE + 7
case THISFORM.Pageframe1.Page1.combo1.listindex=2
REPLA VENCE WITH THISFORM.Pageframe1.Page1.TxtFec_venta.VALUE + 30
case THISFORM.Pageframe1.Page1.combo1.listindex=3
REPLA VENCE WITH THISFORM.Pageframe1.Page1.TxtFec_venta.VALUE + 60
case THISFORM.Pageframe1.Page1.combo1.listindex=4
REPLA VENCE WITH THISFORM.Pageframe1.Page1.TxtFec_venta.VALUE + 90
case THISFORM.Pageframe1.Page1.combo1.listindex=5
REPLA VENCE WITH THISFORM.Pageframe1.Page1.TxtFec_venta.VALUE + 120

otherwise
REPLA VENCE WITH THISFORM.Pageframe1.Page1.TxtFec_venta.VALUE + 30
endcase
do case
case tp ="B"
REPLA TIPO WITH "FCB"
case tp ="A"
REPLA TIPO WITH "FCA"
case tp ="C"
REPLA TIPO WITH "FCC"
ENDCASE

REPLA CONCEPTO WITH "FACTURA CREDITO"
repla estado with "IMPAGA"
flush
TABLEUPDATE(.t.)
unlock all
*---------------
endif

y santo remedio nunca mas tube problemas siempre se graban bien los datos , solo le agregue el tableupdate() despues del flush().
Espero te sirva , pruebalo y veras el resultado bueno.
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

Tablas DBF compartidas en RED

Publicado por Resculleda (4 intervenciones) el 15/06/2011 19:37:03
Gracias Alberto. Pruebo y te aviso.
Juan Manuel: siempre bienvenidos tus aportes.

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