Controlar el AddNew cuando se desconecta de la Red.

From: Diógenes Vilarroel \(Hotmail\) (dv10200_at_hotmail.com)
Date: 03/17/05


Date: Thu, 17 Mar 2005 16:47:01 -0400

Saludos Grupo.

Espero que alguien pueda ayudarme con mi problema que es bien particular.

El Asunto es que estoy trabajando en una aplicación cliente en Visual Fox
que se conecta a una tabla "x1.dbf "que esta contenida en la Base de datos
"y1.dbc" y se encuentra en una unidad de red "p:\dbfs".

Lo particular es que mi programa cliente utiliza ADO y no el motor de Visual
Fox para acceder a la tabla (me reservo las razones).

el proceso es bastante sencillo y lo resumo en tres pasos:

1.- Creo los objetos, efectúo la conexión y abro la tabla:

stringcon="Driver={Microsoft Visual FoxPro
Driver};SourceType=DBC;SourceDB=p:\dbfs\y1.dbc;Exclusive=No"
ado_conn = CREATEOBJECT("ADODB.Connection")
ado_rs = CREATEOBJECT("ADODB.Recordset")
.
.
ado_conn.Open(stringcon)
.
.
ado_rs.CursorType = adOpenKeyset
ado_rs.LockType=adLockPessimistic
ado_rs.Open("x1", ado_conn, , , adCmdTable)

2.- En un ciclo "loop" agrego varios registros con el siguiente código:

 ado_rs.AddNew
 ado_rs.fields('CEDULA').value="12345678"
 ado_rs.fields('NOMBRE').value="PEDRO"
 ado_rs.fields('APELLIDO').value="PEREZ"
 ado_rs.Update

3 Cierro conexiones:

ado_rs.close
ado_conn.close

Nota: omito el código de manejo de errores por simplicidad.

Pues bien, todo me funciona perfecto, pero que pasa cuando se interrumpe la
comunicación de la red (desconecto el cable de red) durante el proceso de
agregar registros?

1.- ADO no emite error a Visual Fox al ejecutar el método update
(ado_rs.Update)
2.- Los registros se añaden en memoria cache (recordset en memoria) sin
tener control de esta operación.
3.- Windows (en mi caso XP) me informa que se han perdido registros al
intentar escribir en el archivo p:\dbfs\x1.dbf pero Fox no lo hace.
4.- Si la comunicación se restablece, ADO no lo detecta y sigue escribiendo
en Cache.

Intente lo siguiente usando el método addnew en forma directa para no
utilizar el método update y forzar que se genere un error a Visual y
capturarlo:

    dimen campos(12), valores(12)
    campos(1)='CEDULA'
    campos(2)='NOMBRE'
    campos(3)='APELLIDO'

    valores(1)='12345678'
    valores(2)='PEDRO'
    valores(3)='PEREZ'

    ado_rs.AddNew(@campos,@valores)

Esto funciona mientras hay comunicación. Pero al desconectar el computador
de la red, el programa se paraliza o se "cuelga" y no se reporta ningún
error. Hay que cerrar el programa con Ctrl+Alt+Del.

Lo mismo me sucedio utilizando el comando SQL - INSERT a través del método
execute del recordset.

Me sugirieron que abriera y cerrara las conexiones cada vez que se intenta
escribir un registro. Lo cual es valido y funciona para un registro a la
vez. Pero esto no es valido para la actualización de un lote de registros.

¿Como puedo controlar esta situación mediante programación?
¿Se podria utilizar el metodo Resync del recordset para verificar si hay
conexión antes de utilizar el metodo AddNew? y ¿Como se haría?

Gracias a quien pueda ayudarme.



Relevant Pages

  • Re: "The O.C." has a wardrobe malfunction
    ... >> Last week I examined this extremely carefully, being such a fan of FOX ... >> dramas, and it's much ado about nothing. ... The scene is way too dark and ...
    (rec.arts.tv)
  • Re: "The O.C." has a wardrobe malfunction
    ... >>> Last week I examined this extremely carefully, being such a fan of FOX ... >>> dramas, and it's much ado about nothing. ... The scene is way too dark and ...
    (rec.arts.tv)
  • Re: "The O.C." has a wardrobe malfunction
    ... > Last week I examined this extremely carefully, being such a fan of FOX ... > dramas, and it's much ado about nothing. ... The scene is way too dark and ...
    (rec.arts.tv)