有关Delphi调试器检测到的错误问题!!!

comeonbabe 2003-12-12 03:56:11
我通过MDI子窗体做了一个MDI结构的数据库系统(其中用了一个公有数据模块,并且MDI子窗体是动态创建),调试中,当在主窗体上切换MDI子窗体时,出现"工程'project.exe'检测到错误类EAccessviolation,错误信息:存取地址004E36EC违例发生在模块'project.exe'中,读 在00000001里,进程中止,使用单步或并行继续运行".确定后继续运行,又出现提示"存取地址"004E3768违例发生在模块'project.exe'中,读 在地址00000000里",但窗体会显示出来.如果再继续切换几次,就会出现"入口违规:地址0000000,读对于地址00000000",并且窗体不能显示.以上的数字字符串有变化.遇到这类问题真伤脑筋,请各位打虾帮帮忙,在下不胜感激!
...全文
164 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
comeonbabe 2003-12-12
  • 打赏
  • 举报
回复
主窗体上某菜单的Click事件:
procedure TF_Main.M_ClassClick(Sender: TObject);
begin
if CreateForm(F_Class)=false then
F_Class:=TF_Class.Create(Application);
DM.DS_Class.Enabled :=true;
end;
CreateForm--动态创建窗体函数
F_Class--MDI子窗体
DM--数据模块
DS_Class--数据源

函数CreateForm如下:
function TF_Main.CreateForm(CForm:TForm):boolean;
var
No:integer;
FormExist:boolean;
begin
FormExist:=false;
if (CForm=NiL) then
begin
CreateForm :=false;
exit;
end;
for No:=0 to Screen.FormCount -1 do
begin
if Screen.Forms[No].ClassType =CForm.ClassType then
FormExist:=true;
end;
if FormExist=false then
CreateForm:=false;
if CForm.WindowState =wsMinimized then
ShowWindow(CForm.Handle,SW_SHOWNORMAL)
else
ShowWindow(CForm.Handle,SW_SHOWNA);
if not CForm.Visible then
CForm.Visible :=true;
CForm.BringToFront ;
CForm.SetFocus ;
CreateForm:=true;
end;

MDI子窗体上的关闭按钮:
procedure TF_Class.ToolButton12Click(Sender: TObject);
begin
inherited;
F_Class.Close;
end;

MDI子窗体模板:
procedure TF_Inherit.FormClose(Sender: TObject; var Action: TCloseAction);
begin {*****窗口关闭事件*****}
case (Sender as TForm).Tag of //判断关闭窗口的标志值
1: begin
DM.DS_Class.Enabled := false;
end;
end;
Action := caFree; //释放空间
// (Sender as TForm).Free;
end;

数据模块中一些按钮与数据源的关联:
procedure TDM.DS_ClassStateChange(Sender: TObject);
begin
F_Class.ToolButton4.Enabled :=(DS_Class.State =dsEdit) or (DS_Class.State =dsInsert);
F_Class.ToolButton6.Enabled :=F_Class.ToolButton4.Enabled ;
end;

procedure TDM.DS_ClassDataChange(Sender: TObject; Field: TField);
begin
F_Class.ToolButton3.Enabled :=(AT_Class.RecordCount >0);
end;
sundayboysII 2003-12-12
  • 打赏
  • 举报
回复
查一下代码,有没有create后接着被释放掉,然后没有create就又调用了。
SeaWave 2003-12-12
  • 打赏
  • 举报
回复
这是典型的空指针引用,要看你的代码才知道错在哪里。
问题出在引用了一个未实例化的对象(空对象)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧