debugging ms-access vb6 jet tracing

debugging - Microsoft JET SQL Query Logging o "¿Cómo depuro el programa de mi cliente?"



ms-access vb6 (5)

No es posible sin la ayuda de los desarrolladores. Lo siento.

El problema:

Usamos un programa escrito por nuestro mayor cliente para recibir pedidos, transferir libros y hacer otras cosas relacionadas con los pedidos. No tenemos otra oportunidad más que utilizar el programa y el cliente es muy poco favorable cuando se trata de problemas con su programa. Solo tenemos que vivir con el programa.

Ahora bien, este programa es la mayoría de las veces extremadamente lento cuando se usa con dos o más usuarios, así que traté de mirar detrás de la cortina y encontrar el origen del problema.

Algunos puntos sobre el programa que descubrí hasta ahora:

  • Está escrito en VB 6.0
  • Utiliza un Access-DB protegido por contraseña (Access 2000 MDB) que se encuentra en una carpeta en la máquina de un usuario.
  • Esa carpeta se comparte en la red y es utilizada por todos los demás usuarios.
  • Utiliza la versión msjet40.dll 4.00.9704 para comunicarse con el acceso. ¿Supongo que es ADO?

También utilicé Process Monitor para supervisar el acceso a archivos y descubrí por qué el programa es tan lento: está realizando miles de operaciones de lectura en el archivo mdb, incluso cuando el programa está inactivo. En la red esto es, por supuesto, tremendamente lento:

Process Monitor Trace http://img217.imageshack.us/img217/1456/screenshothw5.png

La verdadera pregunta:

¿Hay alguna manera de controlar las consultas que son responsables de la actividad de lectura? ¿Hay un indicador de seguimiento que pueda establecer? Enlazando el DLL JET? Supongo que el programa está haciendo algunas consultas caras que están causando que JET lea muchos datos en el proceso.

PD: Ya traté de poner el mdb en el servidor de archivos de nuestra compañía con el éxito de que el acceso fue aún más lento que el compartido local. También traté de cambiar los mecanismos de bloqueo (bloqueo oportunista) en el cliente sin éxito.

Quiero saber qué está pasando y necesito algunos hechos y sugerencias para el desarrollador de nuestro cliente para ayudarlo a hacer que el programa sea más rápido.


Primera pregunta: ¿Tiene una copia de MS Access 2000 o superior?

Si es así: cuando dice que el MDB está "protegido con contraseña", ¿quiere decir que cuando intenta abrirlo con MS Access, recibe un mensaje de solicitud de contraseña solamente o le solicita un nombre de usuario y una contraseña? (O le da un mensaje de error que dice: "No tiene los permisos necesarios para usar el objeto foo.mdb").

Si es el último, (seguridad de nivel de usuario), busque un archivo .MDW correspondiente que vaya junto con el MDB. Si lo encuentra, este es el "archivo de información de grupo de trabajo" que se utiliza como una "clave" para abrir el MDB. Intente crear un acceso directo en el escritorio con un objetivo como:

"Path to MSACCESS.EXE" "Path To foo.mdb" /wrkgrp "Path to foo.mdw"

MS Access debería entonces pedirle su nombre de usuario y contraseña que (con suerte) es lo mismo que la aplicación VB6 le pide. Esto al menos le permitiría abrir el archivo MDB y observar la estructura de la tabla para ver si hay defectos de diseño obvios.

Más allá de eso, hasta donde yo sé, Eduardo tiene razón en que necesita ejecutar un depurador en el código fuente del desarrollador para averiguar exactamente qué están haciendo las consultas en tiempo real ...


¿No podría lanzar un rastreador de paquetes (como Wireshark) en la red y observar el tráfico entre un usuario y la máquina host?


Si usa una conexión ODBC, puede habilitar el registro para eso.

  1. Inicie el Administrador de orígenes de datos ODBC.
  2. Seleccione la pestaña Seguimiento
  3. Seleccione el botón Iniciar seguimiento ahora.
  4. Seleccione Aplicar o Aceptar.
  5. Ejecute la aplicación por un tiempo.
  6. Regrese al administrador de ODBC.
  7. Seleccione la pestaña Seguimiento.
  8. Seleccione el botón Detener seguimiento ahora.
  9. La traza se puede ver en la ubicación que especificó inicialmente en el cuadro Ruta del archivo de registro.

Para poner sus sucias manos sobre exactamente lo que Access hace consultando entre bastidores, hay una característica no documentada llamada JETSHOWPLAN: cuando se enciende en el registro, crea un archivo de texto showplan.out. Los detalles están en este artículo de TechRepublic .

Para rastrear problemas de pesadilla es inmejorable, es el tipo de cosas que obtienes en tus grandes bases de datos industriales caras, esta característica es genial, es adorable y esponjosa, es mi amiga ... ;-)