Inicio > C y C++ > tadeor > Consulta sobre el acceso a Base de datos Access 97

Consulta sobre el acceso a Base de datos Access 97

Experto:
Usuario:
Fecha: 24/11/2009
Valoración: (3,00 sobre 5) Categoría: C y C++
24/11/2009
corlagon, usuario preguntando en C y C++
Usuario
Hola tadeor. Veras mi pregunta es la siguiente:
Tengo una aplicación hecha en visual c++, es una aplicación de comunicaciones, acepta unos datos del puerto serie y los procesa, en dicho procesamiento se accede a una base de datos Access 97 para comparar esos valores leidos del puerto serie. En mi aplicación manejo sockets para la comunicación entre varias aplicaciones del mismo tipo en máquinas distintas,en la aplicación tb uso 2 hilos, uno para la recepción de datos por el puerto serie y otro q se encarga del procesamiento con la base de datos. Mi aplicación bajo Sql no da problemas.El problema me viene cuando uso Access 97. El programa de vez en cuando me da problemas y me sale el tipico mensajito de visual "Abnormal program termination". Yo no cargo en exceso la BAse de datos, mis consultas no son muy grandes, utilizo sobre todo vistas en casi todas mis consultas. No se si podrá influir el tamaño del búfer de ODBC de Access 97 o el tamaño de memoria reservado a los hilos cuando se crean. Otra consulta q me gustaria hacerte es:
1)¿ sabes si en visual C++ es conveniente hacer consultas por código del tipo SELECT * FROM [tabla] WHERE.... o del tipo SELECT COUNT (*) FROM [tabla]?. Estos dos tipos de consultas los utilizo mucho. Con respecto al acceso a BAse de datos utilizo clases de tipo CRecordset de tipo dynaset.
1)¿A la hora de hacer un Open y un Close de una tabla ocurre algo si no se deja un tiempo de espera entre una operación y otra?¿A Access le puede pesar este tipo de operaciones?
Todos estos inconvenientes me han aparecido por desarrollar la aplicación bajo SQL SERVER 2000, SQL es un motor mucho mejor y muchos problemas q da Access te lo soulciona. Mi problema es q debo adaptar mi aplicación a Access y ahora me encuentro con un funcionamiento inestable. Las tablas que uso no tienen muchos registros, ya conozco el límite de Access en este punto.
Mi aplicación corre sobre Windows NT SERVER 4.0 con los últimos parches, en Windows 2000 me da muchos más problemas.

1 saludo
Francisco
24/11/2009
corlagon, experto respondiendo en C y C++
Experto
Hola corlagon,

1.- usar SELECT * where o COUNT * from ??, bueno esto desde luego depende de lo que quieras hacer, estas dos sentencias no tienen mucho que ver, select * te devulve todas las filas de la tabla que coincidan con ese campo y count * te cuenta cuantas filas hay y te devulve el numero de filas, entonces depende de lo que tu quieras, si solo te interesa el numero de filas usa el count si necesitas los datos usa el select where, esto no se puede comparar la velocidad de uno con otro, depende de lo que necesites.

2.- Open y Close??? el uso de Access retarda un poco a la aplicación entonces no viene de mas el hacer las cosas con cuidado, de todas formas no creo que tengas un codigo con un Open y debajo un Close, supongo que entre ellas haras alguna consulta a la base de datos??, con ya hacer algo entre medias de las ordenes Open y Close implica un tiempo suficiente para que se abra y cierre bien.

Una cosa que si debes tener en cuenta al usar hilos es la posibilidad de que los dos hilos actuen a la vez sobre la base de datos en el mismo sitio, si insertas cosas en la BD es importante que uses sentencias bloqueantes para que otros hilos no vayan a la BD a leer en esa zona cuando todavía ese hilo no ha hecho el commit. Es importante que tengas en cuenta el posible acceso simultaneo de los hilos a la BD porque eso puede que sea el causante de que el programa termine anormalmente en ocasiones.

Un saludo.
24/11/2009
corlagon, usuario preguntando en C y C++
Usuario
Bien. Una respuesta aceptable.
Más opciones
Enlaces patrocinados