首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

很令人迷惑的地址异常: raised exception class EAccessViolation with message.

2012-02-09 
很令人迷惑的地址错误: raised exception class EAccessViolation with message.....部分源代码如下://过

很令人迷惑的地址错误: 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;

热点排行