** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Error en tabla vinculada por ODBC
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoError en tabla vinculada por ODBC

 Responder Responder
Autor
Mensaje
Ivan Hernandez Ver desplegable
Nuevo
Nuevo


Unido: 17/Febrero/2016
Localización: Bizkaia
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Tema: Error en tabla vinculada por ODBC
    Enviado: 17/Febrero/2016 a las 15:42
Hola.
Tengo creada una aplicacion con .NET que se conecta por ODBC a un servidor IBM mediante una tabla vinculada de ACCESS.

La aplicacion funciona correctamente y realiza modificaciones, inserciones y consultas a dicha tabla vinculada pero nunca un DELETE, cuando los registros son analizados por un operario desde el IBM se realiza la limpieza de los mismos por lo que yo ya no los visualizo en la tabla al abrirla
La problematica es que aleatoriamente se pierden registros que se han modificado antes de que el operario los analize(de unos 2000 casos se habran perdido unos 20-30 durante 3 meses), a la vez yo hago una insercion de los registros en otra base de datos de access(local) y en esta no se pierden ninguno.

-Que puede hacer a una tabla vinculada eliminar registros (sin un delete claro)?
-He observado que aunque yo haga inserciones o modificaciones la fecha y la hora de la base de datos vinculada no se actualiza en el explorador de archivos, solo al entrar y ver los registros se modifica, lo que si se modifica es el archivo temporal de dicha base de datos vinculada (*.laccdb)
-Tengo todas las funciones de Visual que operan con la tabla vinculada entre bloques de try.. catch y siempre cierro las conexiones con la tabla aunque haya habido un fallo ademas de hacer commit y rollback en las inserciones y modificacione, guardo en un .txt un historico de todos los fallos de la aplicacion y aunque no se produzcan fallos se siguen perdiendo registros

Un Saludo y muchas gracias!
Arriba
jmmiralles Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 29/Noviembre/2008
Localización: Albacete-España
Estado: Sin conexión
Puntos: 569
Enlace directo a este mensaje Enviado: 17/Febrero/2016 a las 16:10
Hola Ivan,
¿has probado con ADO?
Saludos desde un lugar de la Mancha

Visita Mi Web

http://jmmirallesortega.wix.com/accessyvba<
Arriba
OmniPresente Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 1858
Enlace directo a este mensaje Enviado: 17/Febrero/2016 a las 16:54
¿Alguna relación con integridad referencial con el "eliminar registros en cascada" activado?

Saludos.
Arriba
Ivan Hernandez Ver desplegable
Nuevo
Nuevo


Unido: 17/Febrero/2016
Localización: Bizkaia
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 17/Febrero/2016 a las 17:18
Hola. Gracias por contestar. Ninguna integridad referencial ni eliminar en cascada. En cuanto al ado.net está es la primera vez que uso una tabla vinculada. Hasta ahora utilizaba bases de datos en local o en red pero sin vinculación y utilizaba oledb (oledbdatareader, oledbcommand, dataset. Executescalar...) que es lo que he utilizado en esta aplicación
Un saludo!
Arriba
jmmiralles Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 29/Noviembre/2008
Localización: Albacete-España
Estado: Sin conexión
Puntos: 569
Enlace directo a este mensaje Enviado: 18/Febrero/2016 a las 08:50
Hola Ivan, ADO para Access y ADO.Net no tienen nada que ver, tienen objetos diferentes, aunque su funcionamiento es el mismo o casi el mismo, una instrucción SQL es lo mismo en .NET o VBA solo que pueden cambiar algunos nombre, pero como tal la instrucción SQL es el misma.

Por lo de la tabla vinculada no tiene que ser el problema, piensa que lo único que no puedes hacer es modificar la tabla, en cuanto a propiedades, pero el contenido es como si estuvieras trabajando con la tabla directamente, puedes añadir, borrar, modificar, moverte por los registros etc.; en Access esto es lo mismo que si lo hacemos con el objeto Dcmd, con DAO o ADO, la tabla es la misma, lo que cambia el objeto a utilizar.


Saludos

Edito para ampliar.

Editado por jmmiralles - 18/Febrero/2016 a las 08:54
Saludos desde un lugar de la Mancha

Visita Mi Web

http://jmmirallesortega.wix.com/accessyvba<
Arriba
Ivan Hernandez Ver desplegable
Nuevo
Nuevo


Unido: 17/Febrero/2016
Localización: Bizkaia
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 18/Febrero/2016 a las 09:00
Gracias jmmiralles por contestar.
Por lo que entiendo el problema al 100% esta en mi aplicacion (envio de datos erroneos, modificacion incorrecta de la tabla...) o en el servidor AS-400 (En este caso el control lo tiene el cliente y me asegura que no hay relación con integridad referencial con el "eliminar registros en cascada" activado)
En cuanto a lo de ADO le dare un vistazo, entiendo que sera cambiar en la aplicacion el tipo de conexiones.
Muchas gracias y un Saludo
Arriba
OmniPresente Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 1858
Enlace directo a este mensaje Enviado: 18/Febrero/2016 a las 09:39
A mí que se borren registros "porque sí" me parece bastante raro... yo creo que te toca pensar en la aplicación, ver qué tienen esos registros que desaparecen y qué procedimiento puede llegar a borrarlos.

Saludos.
Arriba
Ivan Hernandez Ver desplegable
Nuevo
Nuevo


Unido: 17/Febrero/2016
Localización: Bizkaia
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 18/Febrero/2016 a las 10:00
Gracias por la respuesta OmniPresente, a mi tambien me parece muy raro.

Al principio me decantaba por la tabla vinculada ya que es la primera vez que trabajo con ellas, pero veo que parece que el problema es de la aplicacion.
Comprobare los registros ya que al modificar en la tabla vinculada hago una copia del registro en otra tabla identica pero sin vinculacion ninguna (de esta tabla no desaparecen).
Realmente la operativa es
1-El AS-400 deja uno o varios registros en la tabla vinculada
2-Mi aplicacion modifica los registros en funcion de la operativa (no se modifican todos los campos) o inserta nuevos en funcion de las necesidades
3-Al finalizar la operativa el AS-400 limpia los registros que tienen un status determinado (no en el mismo momento).

Lo que realmente me asombra es que los registros desaparecen cuando se ha alcanzado el status final pero el operario aun no ha realizado la limpieza de los registros. Entiendo que ese registro se ha modificado correctamente ya que la aplicacion no detecta ningun error de modificacion ni de insercion y sigue con su proceso normal.
Lo que aun me parece muy curioso es que motivo es el que un error en la aplicacion pueda eliminar registros, siempre que lo tengas en un bloque try...catch y haga commit y rollback en todas las inserciones y modificaciones, solo me queda pensar que las consultas sean el motivo...

Muchas Gracias y un Saludo!
Arriba
jmmiralles Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 29/Noviembre/2008
Localización: Albacete-España
Estado: Sin conexión
Puntos: 569
Enlace directo a este mensaje Enviado: 18/Febrero/2016 a las 10:23
Pero que lo tengas en un bloque try...C, no deja de ser un bloque para gestionar los errores, en Vba lo hacemos con el objeto err o las transiciones para las inserciones,  modificaciones etc, también las podemos hacer con ADO, por tanto el problema yo lo veo en la aplicación no en los medios que utilizas, la tabla vinculada no le veo inconveniente alguno, y como dice Luís me parece raro el borrado de registros.
Saludos desde un lugar de la Mancha

Visita Mi Web

http://jmmirallesortega.wix.com/accessyvba<
Arriba
Ivan Hernandez Ver desplegable
Nuevo
Nuevo


Unido: 17/Febrero/2016
Localización: Bizkaia
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 18/Febrero/2016 a las 10:34
Ok, ya entiendo revisare los registros eliminados y la aplicacion, por lo que veo si me salto la tabla vinculada y hago la conexion directamente con el AS400 el problema persistira.
Entonces por lo que me comentais lo mas factible es que haga las conexiones con ADO, y quizas lo mas recomendable es utilizar un recordset para realizar las consultas?

Un Saludo y gracias!
Arriba
jmmiralles Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 29/Noviembre/2008
Localización: Albacete-España
Estado: Sin conexión
Puntos: 569
Enlace directo a este mensaje Enviado: 18/Febrero/2016 a las 11:37
Con el objeto Recordset o con Command.
Command es el equivalente a ExecuteScalar de. NET, si no recuerdo mal.

Suerte
Saludos desde un lugar de la Mancha

Visita Mi Web

http://jmmirallesortega.wix.com/accessyvba<
Arriba
Ivan Hernandez Ver desplegable
Nuevo
Nuevo


Unido: 17/Febrero/2016
Localización: Bizkaia
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 18/Febrero/2016 a las 11:46
Muchas Gracias por la respuesta!

Le dare una vuelta mas y si el problema persiste te hare caso y cambiare las conexiones.

Un Saludo y veo que tienes una web muy util.
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 2992
Enlace directo a este mensaje Enviado: 18/Febrero/2016 a las 15:53
Para que tenga efecto las transacciones,debes tener una conexión creada.
Agregó:
La tabla tiene que tener un campo clave.

Editado por guarracuco - 18/Febrero/2016 a las 15:56
https://tucondominioaldia.net
Arriba
Ivan Hernandez Ver desplegable
Nuevo
Nuevo


Unido: 17/Febrero/2016
Localización: Bizkaia
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 18/Febrero/2016 a las 16:44
Hola, Gracias por la respuesta.

Si, eso lo tengo claro. cada vez que hago una transaccion abro, ejecuto la transaccion y cierro la conexion que tengo creada previamente.

Un Saludo!
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable