我正在尝试在Delphi 7中编写ADO数据库分析器。 它是Delphi项目的一部分。
我正在使用OnExecuteComplete
事件,但在某些PC上,我收到“MSADO15.DLL”访问冲突错误。
我已经研究过,并且有些版本不兼容或损坏或者版本不同......
当我使用“Command”的parameters[i].value
属性时发生了AV错误。
然后我决定写一个不同的类型,
现在我需要对在ADOConnection中调用OnExecuteComplete
事件的对象进行引用。
如果我能达到它,问题就会解决。
我使用“Command”和“Recordset”引用来比较通过此ADOConnection链接的所有ADO对象,但是某些ADO对象没有Recordset .. 有没有办法找到谁发射该事件?喜欢Sender?
答案 0 :(得分:1)
如果你在.Net中,我无法理解,但在.Net中它很容易。使用System.Diagnostics.StackTrace查看导致您的活动的整个电话。
对于本机代码,如果在调试模式下编译,可能还有一种获取堆栈跟踪的方法。自从我编写Delphi(或Pascal)代码以来已经有一段时间了。您还可以尝试使用免费AQTime standard进行性能分析,该免费call-graph适用于Delphi(本机和.Net),它也具有{{3}}功能。
答案 1 :(得分:1)
答案 2 :(得分:1)
只有WindowsXP,Windows 2003在读取参数[i] .Value和show recordset后出现“MSADO15.DLL”访问冲突错误。 Windows7没有这个问题。使用WillExecute事件 - 它在任何地方都可以正常工作。在ExecuteComplete中,您可能从记录集中获取记录受影响(RecordsAffected变量工作错误)。稍后如果将参数保存到Variant变量并在可视组件显示记录集后读取它,则可以获取参数[i] .Value - 使用OnButtonClick作为示例或使用Timer事件。这个BUG并没有在所有Delphi版本中修复 - 也在DelphiXE2中修复..
答案 3 :(得分:0)
发件人应该给你一个线索,如果它不是零。将它转换为TComponent并使用其Name属性来找出触发它的组件:
ShowMessage((Sender as TComponent).Name);
如果Sender为nil,堆栈跟踪可能会有所帮助。
显然没有Sender参数。在这种情况下,Connection必须是触发它的类,因此请获取其名称和其他数据。您可以获得足够的参数来了解正在发生的事情。