读书人

很令人迷惑的地址异常: raised excep

发布时间: 2012-02-09 18:22:27 作者: rapoo

很令人迷惑的地址错误: raised exception class EAccessViolation with message.....
部分源代码如下:
//过程1
procedure TfrmCelloadInOut.N1Click(Sender: TObject);
var
strsql:string;
begin
Application.CreateForm(Tfrmcelloadaddup,frmcelloadaddup);
frmcelloadaddup.Caption := '新增';
if frmcelloadaddup.ShowModal = mrOK then
begin
strsql := 'insert into NQICONDB.dbo.S_control_AssignedCelload(小区名,小区号,时段,门限值) values('
+ #39 + Trim(frmcelloadaddup.dxEdit1.Text) + #39 + ','
+ #39 + Trim(frmcelloadaddup.dxEdit2.Text) + #39 + ','
+ #39 + Trim(frmcelloadaddup.dxEdit3.text) + #39 + ','
+ Trim(frmcelloadaddup.dxEdit4.Text) + ')';
execcon(strsql,FrmDataModlePub.MainConnect);
end;
frmcelloadaddup:=nil; frmcelloadaddup.Free;
qrycelload.Close;
qrycelload.Open;
end;

//过程2
procedure TfrmCelloadInOut.N4Click(Sender: TObject);
var
strsql:string;
begin

Application.CreateForm(Tfrmcelloadaddbsc, frmcelloadaddbsc);
frmcelloadaddbsc.Caption := '新增';
if frmcelloadaddbsc.ShowModal = mrOK then
begin
// strsql := 'ssss';
// strsql := 'select top 10 * from NQICONDB.dbo.S_control_AssignedTBFLIMIT_BSC';
// showmessage(strsql);
strsql := 'insert into NQICONDB.dbo.S_control_AssignedTBFLIMIT_BSC(BSC,时段,门限值) values('
+ #39 + Trim(frmcelloadaddbsc.dxEdit1.Text) + #39 + ','
+ #39 + Trim(frmcelloadaddbsc.dxEdit2.Text) + #39 + ','
+ Trim(frmcelloadaddup.dxEdit4.Text) + ')';
execcon(strsql,FrmDataModlePub.MainConnect);
end;
frmcelloadaddbsc:=nil;frmcelloadaddbsc.Free;
qrybsc.Close;
qrybsc.Open;
end;


出现如下错误:
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 004C14E5 in module 'Project1.exe'. Read of address 0000005C'. Process stopped. Use Step or Run to continue.
出现错误后,蓝色指针停留在过程2的strsql这里。
本人调试经过:
过程一运行是可以的,新增数据正确。过程2中注释strsql插入语句后,strsql前几条被注释的语句是可以运行通过。就是那条插入语句报错。

请高人指点!

[解决办法]
给你一个百试百灵的方法:

Access violation是程序中最常见的一种错误,但是我们可以利用Access violation的提示信息,定位到源代码的具体位置,例如:Access violation at address 005B21FE in module Project1.exe'. Read of address 8080809C,其中005B21FE就是MAP地址,我们只要用这个公式:005B21FE-400000-1000=1B11FE,然后通过源代码生成的MAP文件找到最近的位置,就可以定位了。MAP文件的结构为:2997 0001:001B11F3 3000 0001:001B1207,它是和源代码对应的,前面是源代码行,后面是MAP地址,在DELPHI中生成MAP文件的选项是:Project->Options->Linker->Map file->选中Detailed
[解决办法]
frmcelloadaddup:=nil; frmcelloadaddup.Free;
一眼看去就好像错了哦,应该没眼睛花。呵呵
frmcelloadaddup.Free;
frmcelloadaddup:=nil;
[解决办法]

探讨
给你一个百试百灵的方法:

Access violation是程序中最常见的一种错误,但是我们可以利用Access violation的提示信息,定位到源代码的具体位置,例如:Access violation at address 005B21FE in module Project1.exe'. Read of address 8080809C,其中005B21FE就是MAP地址,我们只要用……

[解决办法]
探讨
frmcelloadaddup:=nil; frmcelloadaddup.Free;
一眼看去就好像错了哦,应该没眼睛花。呵呵
frmcelloadaddup.Free;
frmcelloadaddup:=nil;

读书人网 >.NET

热点推荐