急死人了,关于EAccessvilation的问题(100分)

  • 主题发起人 主题发起人 litte wing
  • 开始时间 开始时间
L

litte wing

Unregistered / Unconfirmed
GUEST, unregistred user!
程序在编译时没有问题,只要一运行,就出现
Project main.exe raised exception class EAccessViolation with
message'Acces violation at address 00495358 in module
'main.exe'.read of address ffffffff',Process Stopped .Use
step or RIn cointinue.
但OK后,程序可以正常运行,请各位大虾赐教,最好详细些,我对此错误一无所知。
Procedure Init_input_Enabled(Y_N,N_N:Boolean);
begin
With Form_Input_SCBdo
begin
DBLookupComboBox3.Enabled:=Y_N;//出现错误,删除该语句,下一语句出错
DBEdit1.Enabled:=Y_N;
DBEdit2.Enabled:=Y_N;
DbGrid2.ReadOnly:=Y_N;
DBGrid1.Enabled:=N_N;
end;
end;
 
你的这段程序本身没有问题,关键问题出在Form_Input_SCB 上,
不知道是一个什么类,你没交待。
 
Form_Input_SCB 应该是form了,问题估计出在
你是在什么时候调用Init_input_Enabled的?调用时Form_Input_SCB是否已经
创建了
 
Form_Input_SCB是Form,调用是在Form_Input_SCB的BitBtn的OnClick事件中
调用的,在调用前Form_Input_SCB已经Create。
 
With Form_Input_SCBdo

改为
With selfdo

看看,如果不出问题,说明Form_Input_SCB这个变量用错了
 
With Form_Input_SCBdo

改为
With selfdo
后出错,这里不能用self
 
什么叫“这里不能用SELF”?
你的代码段中没有错误,是其他地方引起的。比如数据库方面。
检查一下其他部分的代码
 
Form_Input_SCB 是自动创建的吧!
可能是form还没创建就运行DBLookupComboBox3.Enabled,那当然不行
 
不能用self肯定是这个东西没被创建或者已经被释放了
 

>>Form_Input_SCB是Form,调用是在Form_Input_SCB的BitBtn的OnClick事件中
>>调用的,在调用前Form_Input_SCB已经Create。
这样的话,还 With 干什么,去掉试试,还出错的话,肯定是别的地方的毛病了
 
同志们,你们应该看清楚了再出刀呀!
Procedure Init_input_Enabled(Y_N,N_N:Boolean);
^^
它的这个过程根本就不是form的成员,因此当然需要 with,
也当然不能用 self.
至于他的程序为什么错,原因还应该是form没有create的问题,
我想他的这个问题可能已经自己解决了,所以也不上来了 :-)
 
这部分代码确实有问题,关键在于OnActivate,
你跟踪一下就知道了,OnActivate事件在TForm.Create时就会立刻
被激活,因此你的OnActivate中的代码:
Edit2.Text:=IntToStr(DM_1.T_SCB.RecNo);
Edit3.Text:=IntToStr(DM_1.T_SCB.RecordCount);
不会出错,因为这是在已经create的对象中运行,reference相当于self.

Init_input_Enabled(由于不是这个form的成员)中
With Form_Input_Scbdo
begin
.....
end;

有问题,因为你用了变量Form_Input_Scb,而这个变量此时还没有被赋值,虽然对象已经创建.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
解决办法很简单,
1.把这些过程定义为form的成员,
2.在form OnShow中调用 Init_input_Enabled等函数.
怎么样,另外那同一个问题帖子也就结束了吧?...... :-)
 

网路堵塞,我上不要来!!!
这个出错的地方已经解决,但在整个程序运行时出现同样的错误,出错语句是:
Applation.Run;
 
网路堵塞,我上不要来!!!
这个出错的地方已经解决,但在整个程序运行时出现同样的错误,出错语句是:
Application.Run;
 
TO 温柔一刀:
1.把这些过程定义为form的成员,
2.在form OnShow中调用 Init_input_Enabled等函数.
请问具体怎么做?我不大明白,请不惜赐教!
 
上述两个解决方法之间是"或者"的关系,也就是说任何其中一个都可以解决问题,
不是两个都用
1.把Procedure Init_input_Enabled(Y_N,N_N:Boolean);定义为
TForm_Input_SCB.Procedure Init_input_Enabled(Y_N,N_N:Boolean);
这样就不必再在这个函数中使用 with Form_Input_SCB ...
2.你在另一个帖子中写的是
在TForm_Input_SCB 的OnActivate事件中调用这些函数,现在应改为OnShow事件
中调用,你不会不知道在 property editor中双击OnShow事件吧!
另外,你说Application.Run出毛病,可能是为了改这个错误,把很多form create之类
改来改去,已经混乱了,仔细清理你一下你的project.
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
941
SUNSTONE的Delphi笔记
S
后退
顶部