Consulta sobre el acceso a Base de datos Access 97

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 leídos 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 también uso 2 hilos, uno para la recepción de datos por el puerto serie y otro que 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 típico mensajito de visual "Anormal 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 que me gustaría 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 que da Access te lo soulciona. Mi problema es que 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

1 Respuesta

Respuesta
1
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 devuelve todas las filas de la tabla que coincidan con ese campo y count * te cuenta cuantas filas hay y te devuelve 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 más el hacer las cosas con cuidado, de todas formas no creo que tengas un código con un Open y debajo un Close, ¿supongo qué entre ellas harás 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 actúen 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.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas