我这几天重装了一下电脑的操作系统win2000,也把DELPHI7重装,包括一些控件。然后重新编译以前写的程序,问题就出现了:
我在一个界面用AdvStringGrid,代码如下
procedure Tw_f_grscqk_cx.AdvStringGrid1GetEditorType(Sender: TObject; ACol,
  ARow: Integer; var AEditor: TEditorType);
begin
  case ACol of
  0:AEditor := edComboList;
  1:AEditor := edComboList;
  end;
  if (acol=0) then
  begin
     AdvStringGrid1.Combobox.Clear;
     AdvStringGrid1.AddComboString('并且');
     AdvStringGrid1.AddComboString('或者');
  end;  if acol=1 then
  begin
     AdvStringGrid1.Combobox.Clear;
     AdvStringGrid1.AddComboString('生产批号');
     AdvStringGrid1.AddComboString('产品代码');
     AdvStringGrid1.AddComboString('产品型号');
     AdvStringGrid1.AddComboString('工序拼音');
     AdvStringGrid1.AddComboString('员工卡号');
     AdvStringGrid1.AddComboString('员工姓名');
     AdvStringGrid1.AddComboString('机台代码');
     AdvStringGrid1.AddComboString('薄膜批号');
     AdvStringGrid1.AddComboString('日期');
  end;
end;
但在程序执行的时候,当你点击AdvStringGrid的某个单元格就出现:EAccessViolation with message'Access violation at address 77f99f58 in module 'ntdll.dll '.Write of address 00404bad ' .在没有重新装系统之前,这个界面是没有任何问题的。
我如果把程序改成
procedure Tw_f_grscqk_cx.AdvStringGrid1GetEditorType(Sender: TObject; ACol,
  ARow: Integer; var AEditor: TEditorType);
begin
  case ACol of
  0:AEditor := edComboList;
  1:AEditor := edComboList;
  end;
  if (acol=0) then
  begin
     AdvStringGrid1.Combobox.Clear;
     AdvStringGrid1.AddComboString('并且');
     AdvStringGrid1.AddComboString('或者');
  end;
end;
就没有什么问题,请问这个问题要怎么处理?我有试着从其他地方拷了一个ntdll.dll覆盖到C:\WINNT\system32和C:\WINNT\ServicePackFiles\i386中,但还是不能用。谢谢了!

解决方案 »

  1.   

    看起来不是程序的问题
    安装windows补丁和delphi补丁看看。
      

  2.   

    >>看起来不是程序的问题是挺奇怪的,如果不是程序问题为啥第二段代码就没问题呢,有点晕
      

  3.   

    应该不会是程序的问题,因为这个程序在我没有重装系统前是没有任何的问题的,刚才我把我这这个程序拿到别人的三台电脑上去运行,只有一台有出现问题,其他两台都没有问题,这样看来会不会主要是windows补丁的问题呢?
      

  4.   

    我把程序拿到另外的电脑上去编译不会出什么问题。
    TO kl2000() :请问要怎样删除控件啊?呵呵
    to yyfhz(火山) :是随便点就报错了,没有经过一定的步骤才会报错。这个程序没有外接数据库。
      

  5.   

    我认为是程序的问题。因为程序中隐含的问题,有的机器上不出现,有的机器上出现,事实上是内存访问出错。铁定是Bug。
      

  6.   

    >>我认为是程序的问题。因为程序中隐含的问题,有的机器上不出现,有的机器上出现,事实上是内存访问出错。铁定是Bug。比较同意,我觉得也是程序的问题,主要是内存访问的问题。
    对于一个字符串不正确的访问同样会出现这个问题的,楼主好好看看代码吧。