access violation at address 00000000.read of address 00000000的问题如何解决??

hairun 2003-05-06 01:57:00
谢谢!!
...全文
895 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nmqhzh 2003-06-19
  • 打赏
  • 举报
回复
咦!
楼主代码未发现DataFetModule的定义啊!
难道不需要:
var
DataFetModule:TDataFetModule;
吗?
和3楼 zhangjianyu(八毛) 的说法正相反啊!
不过,我的程序中已定义全局了,DELPHI退出后,DEKPHI报出错误信息,和楼主的差不多。
查看进程管理器,发现DELPHI32未关闭,强行关掉它后,错误框不再出现。另外,我那编译后的EXE程序可正常执行,未发现什么问题。是不是DELPHI自身有BUG!对ADO支持得不好。(因为在ODBC方式从未发现此类错误,我的MDAC版本为2.7)
nmqhzh 2003-06-18
  • 打赏
  • 举报
回复
关注!
我这里也有这样的问题!谢谢楼主的提问!
请问楼上gytyl(丘山) :
DataFetModule:=TDataFetModule.Create(nil);

DataFetModule:=TDataFetModule.Create(self);
两者括号中的nil和self的作用一样吗?
用nil可以避免楼主的问题出现吗?
我的程序里有大量的动态创建的IMAGE。创建方法都是如Simage:=Timage.create(self),紧接着指定其parent属性...
误译正常编译执行,就是DELPHI退出时,出现楼主一样的错误,区别仅在地址上。
gytyl 2003-05-06
  • 打赏
  • 举报
回复
你用
DataFetModule:=TDataFetModule.Create(nil);


来创建,
应该可以的。
hairun 2003-05-06
  • 打赏
  • 举报
回复
unit FeeTel;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls, Buttons;

type
TTelFee = class(TForm)
GroupBox5: TGroupBox;
Label30: TLabel;
QueryQQButton: TSpeedButton;
SpeedButton2: TSpeedButton;
Label1: TLabel;
QueryQQEdit1: TEdit;
QueryQQEdit2: TEdit;
DBGrid1: TDBGrid;
procedure QueryButtonClick(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
TelFee: TTelFee;

implementation

uses FetDataModule;

{$R *.dfm}

procedure TTelFee.QueryButtonClick(Sender: TObject);
begin
DataFetModule:=TDataFetModule.Create(self);
DataFetModule.ClientDataSet2.Close;
DataFetModule.ClientDataSet2.Params.ParamByName('iMinQQNo').AsInteger:= StrToInt(QueryQQEdit1.Text);
DataFetModule.ClientDataSet2.Params.ParamByName('iMaxQQNo').AsInteger:= StrToInt(QueryQQEdit2.Text);
DataFetModule.ClientDataSet2.Open;
DBGrid1.Columns[0].FieldName := DataFetModule.ClientDataSet2.Fields[0].FieldName;
DBGrid1.Columns[1].FieldName := DataFetModule.ClientDataSet2.Fields[2].FieldName;
DBGrid1.Columns[2].FieldName := DataFetModule.ClientDataSet2.Fields[3].FieldName;
DBGrid1.Columns[3].FieldName := DataFetModule.ClientDataSet2.Fields[4].FieldName;
DBGrid1.Columns[4].FieldName := DataFetModule.ClientDataSet2.Fields[5].FieldName;
end;

procedure TTelFee.SpeedButton2Click(Sender: TObject);
begin
close;
end;

procedure TTelFee.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DataFetModule.Free;
end;

end.
我用Create分配了空间,但还是有问题,这是为什么啊?
zhangjianyu 2003-05-06
  • 打赏
  • 举报
回复
一般是没有为变量分配空间造成的,也就是你声明了一个class变量,而没有调用他的Create方法。检查一下吧,这种错误我也常犯的
WWWWA 2003-05-06
  • 打赏
  • 举报
回复
检查一下程序。
idilent 2003-05-06
  • 打赏
  • 举报
回复
这一般是因为变量没有初始化,或者对象没有创建就是用造成的,把出问题的code贴出来看看。

5,514

社区成员

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

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