Los Foros de ASPTutor.com
Home | Perfil | Registrarse | Temas Activos | Miembros | Buscar | FAQ
Usuario:
Password:
 Todos los Foros
 ADO
 ADO no da error de escritura
 Foro Bloqueado  Tema Bloqueado


Autor Temas
dv10200
Starting Member

Venezuela
7 Posts
Mensajes - 29 Mar 2005 :  23:19:19  Ver Perfil  Enviar Email
Saludos Amigos.

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 pero les garantizo que existe.

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 de la conexión.

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.

Esto lo probe tambien en Visual Basic y sucede lo mismo. Me preocupa que esto sea un problema general independientemente de la Base de Datos y del lengaje de programación.

¿Como puedo controlar esta situación mediante programación?

Gracias a quien pueda ayudarme.


   
 Foro Bloqueado  Tema Bloqueado
Ir a:
Los Foros de ASPTutor.com Los Foros de ASPTutor.com
Ir al principio de la Página

 Imprimir Tema
 

Descargas de manuales¦ Ejemplos de código ¦ Artículos mas visitados ¦ Envía tu articulo ¦ Foros ¦
  Libro de visitas ¦Crea un enlace con ASPTutor 
 

    © 2001-Hasta hoy  Pedro Rufo Martín  contactar