刚刚做了程序,发现Delphi错误也不是那么好逮住然后进行处理的。一般情况下完全可以用Try --Except/Finally -- End块进行错误保护和处理。但是有些时候就不行了。想:
请教各位,如何完全的掌握住Delphi的错误,或者Delphi触发的系统错误?代码有点多,小弟实在是撑不住了所以请教各位,先谢了
具体问题:
在Project里,有如下代码片段:
-----------------------------------------------------------------------------------------
{(1)} Application.CreateForm(Tfrm_Main, frm_Main); {创建窗体并初始化(里面包括各个自己的对象的创建及初始化,读取配置文件(*.ini)中的数据,进行数据库的连接及测试等)}{(2)} Application.Run(); {就是这行发生错误。因为初始化未成功/通过(人为删除了配置文件),所以在窗体frm_Main里直接Self.Close()了}
-----------------------------------------------------------------------------------------不知道是什么原因导致了错误。F8进行单步调试,就错在(2)上(错误提示:Project Project.exe raised exception class EAccessViolation with message 'Access violation at address 004C2D1A in module 'Project.exe'.Read of address 00000034'.)。当没有配置文件时,发生此错误。
注释:frm_Main里有文件是否存在的检测代码(经测试有效)。当无配置文件时,初始化函数进行Application.Message提示后返回False,frm_Main.FormCreate()中检测到返回False后直接Self.Close()或者Appication.Terminate()。
另:在代码中希望结束程序时,调用主窗体的Close()和Appication的Terminate()有什么区别?另外,当连接数据库时(Access2000),无ODBC时,Try块无法将错误保护。ODBC中无数据库密码时也是。如何解决,如何完全的将错误进行保护(不出现系统提示)?
请教各位,如何完全的掌握住Delphi的错误,或者Delphi触发的系统错误?代码有点多,小弟实在是撑不住了所以请教各位,先谢了
具体问题:
在Project里,有如下代码片段:
-----------------------------------------------------------------------------------------
{(1)} Application.CreateForm(Tfrm_Main, frm_Main); {创建窗体并初始化(里面包括各个自己的对象的创建及初始化,读取配置文件(*.ini)中的数据,进行数据库的连接及测试等)}{(2)} Application.Run(); {就是这行发生错误。因为初始化未成功/通过(人为删除了配置文件),所以在窗体frm_Main里直接Self.Close()了}
-----------------------------------------------------------------------------------------不知道是什么原因导致了错误。F8进行单步调试,就错在(2)上(错误提示:Project Project.exe raised exception class EAccessViolation with message 'Access violation at address 004C2D1A in module 'Project.exe'.Read of address 00000034'.)。当没有配置文件时,发生此错误。
注释:frm_Main里有文件是否存在的检测代码(经测试有效)。当无配置文件时,初始化函数进行Application.Message提示后返回False,frm_Main.FormCreate()中检测到返回False后直接Self.Close()或者Appication.Terminate()。
另:在代码中希望结束程序时,调用主窗体的Close()和Appication的Terminate()有什么区别?另外,当连接数据库时(Access2000),无ODBC时,Try块无法将错误保护。ODBC中无数据库密码时也是。如何解决,如何完全的将错误进行保护(不出现系统提示)?
解决方案 »
- 组件拖动问题
- 如何从带密码的ACCESS数据库中导出数据
- QuickRep 自定义格式报表,第一页内容显示不完整?
- 各位大虾,在DELPHI7我怎么也找不到象DELPHI6下Tclientsock的socket封装控件(帮帮忙)
- 一个迷惑不解的问题,如何返回一个ado数据包?
- 改变ComboBox的值时如何改变其他的Edit的值?
- rave 控件怎樣分頁啊(100分)
- Message.Msg等于45119是什么消息?在线等候...
- 请问如何将回车键符号放入键盘缓冲区?
- 如何解决在同一个报表的同一个打印行同时显示数据库中的三条记录.第二行依次显示下三个记录内容.
- 我是个新手,问一个快捷键的小问题
- 如何让inputbox在几秒之后自动消失
建议楼主试试这个:windows.GetLastError;返回值为Cardinal(整型)。
建议不要在MainForm的Create中检测,检测不通过就退出.
你可以在Application.CreateForm(Tfrm_Main, frm_Main); 之前放调用一个函数来检测.检测的结果放在一个全局对象中.
这样做的好处是,防止检测不通过,退出时,主窗体仍然闪现.
为了方便集中管理,我做了个退出程序的函数做些其他的工作,调用它就可以退出程序(form.Close()或者Application.Terminate())。不知道是不是这个的原因。因为只要主窗体建立了,就可以在任何地方,时间调用它。所以不是很好调试。但是用起来方便啊