Microsoft JET SQL查询日志记录或“如何调试客户的程序?”

时间:2008-09-30 13:40:43

标签: debugging ms-access vb6 jet tracing

问题:

我们使用由我们最大的客户编写的程序来接收订单,预订运输和其他与订单相关的内容。我们没有其他机会,只能使用该程序,并且当涉及到他们的程序问题时,客户是非常不支持的。我们只需要参与该计划。

现在这个程序在与两个或更多用户一起使用时大部分时间都非常慢,所以我试着看看窗帘后面找到问题的根源。

关于我到目前为止发现的程序的一些观点:

  • 用VB 6.0编写
  • 它使用受密码保护的Access-DB(Access 2000 MDB),该文件位于一个用户的计算机上。
  • 该文件夹通过网络共享,并由所有其他用户使用。
  • 它使用msjet40.dll版本4.00.9704与访问进行通信。我想这是ADO?

我还使用Process Monitor来监视文件访问,并找出程序速度如此之慢的原因:它在mdb文件上进行了数千次读取操作,即使程序空闲也是如此。在网络上,这当然非常缓慢:

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

真正的问题:

有没有办法监控负责读取活动的查询?我可以设置跟踪标志吗?挂钩JET DLL的?我想这个程序正在做一些昂贵的查询,导致JET在这个过程中读取大量数据。

PS:我已经尝试将mdb放在我们公司的文件服务器上,但访问它的成功甚至比本地共享更慢。我也尝试在客户端上更改锁定机制(机会锁定)但没有成功。

我想知道发生了什么,需要一些有关我们客户开发人员的事实和建议,以帮助他/她更快地完成程序。

5 个答案:

答案 0 :(得分:6)

为了让你的贪婪掌握正是Access正在查询的幕后操作,还有一个名为JETSHOWPLAN的未记录功能 - 当在注册表中打开时,它会创建一个showplan.out文本文件。细节是在 this TechRepublic article alternate,总结于此处:

  

ShowPlan选项已添加到Jet 3.0,并生成一个文本文件   包含查询的计划。 (ShowPlan不支持子查询。)   您必须通过向注册表添加Debug键来启用它,如下所示:

\\HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\JET\4.0\Engines\Debug
     

在新的Debug键下,添加名为JETSHOWPLAN的字符串数据类型   (您必须使用全部大写字母)。然后,将键值ON添加到   启用该功能。如果Access已在后台运行,那么您   必须关闭它并重新启动才能使功能正常工作。

     

启用ShowPlan后,Jet会创建一个名为SHOWPLAN.OUT的文本文件   (最终可能会在您的My Documents文件夹或当前文件夹中   默认文件夹,具体取决于您使用的Jet版本)   time Jet编译查询。然后,您可以查看此文本文件以获取线索   到Jet如何运行您的查询。

     

我们建议您通过更改密钥的值来禁用此功能   到OFF,除非您专门使用它。 Jet将该计划附加到   现有文件,最终,该过程实际上减慢了速度   下。仅在需要查看特定内容时打开该功能   查询计划。打开数据库,运行查询,然后禁用   特征

为了追踪噩梦问题,它是无与伦比的 - 这是你在昂贵的大型工业数据库上得到的东西 - 这个功能很酷 - 它很可爱又蓬松 - 这是我的朋友......; - )

答案 1 :(得分:1)

您是否可以在网络上抛出数据包嗅探器(如Wireshark)并观察一个用户与主机之间的流量?

答案 2 :(得分:1)

如果它使用ODBC连接,您可以为其启用日志记录。

  1. 启动ODBC数据源管理员。
  2. 选择“跟踪”标签
  3. 选择“立即开始跟踪”按钮。
  4. 选择“应用”或“确定”。
  5. 运行应用程序一段时间。
  6. 返回ODBC管理员。
  7. 选择“跟踪”标签。
  8. 选择“立即停止跟踪”按钮。
  9. 可以在最初在“日志文件路径”框中指定的位置查看跟踪。

答案 3 :(得分:0)

第一个问题:您是否有MS Access 2000或更好的副本?

如果是这样的话: 当你说MDB是“密码保护”时,你的意思是当你尝试使用MS Access打开它时,你会得到一个密码提示,或者是否提示你输入用户名和密码? (或者给你一条错误消息,说“你没有必要的权限来使用foo.mdb对象。”))

如果是后者(用户级安全性),请查找与MDB一起使用的相应.MDW文件。如果找到它,这是“工作组信息文件”,用作打开MDB的“键”。尝试使用以下目标制作桌面快捷方式:

"Path to MSACCESS.EXE" "Path To foo.mdb" /wrkgrp "Path to foo.mdw"
然后,MS Access会提示您输入用户名和密码(希望)与VB6应用程序要求的相同。这至少允许您打开MDB文件并查看表结构以查看是否存在任何明显的设计缺陷。

除此之外,据我所知,Eduardo是正确的,您几乎需要能够在开发人员的源代码上运行调试器,以确切了解实时查询正在做什么......

答案 4 :(得分:-1)

没有开发者的帮助是不可能的。遗憾。