在程序刚刚运行时触发了这个错误:Access Violation at Address 004DE670 in module MVHMIS.exe.Read of address 00000158
自己觉得可能是在下面两个过程中出现问题,但是找不出来,麻烦各位帮忙看看
这个先遍历工资数据集的工资记录,然后进行加总,程序编译时出现:sum,s定义了但是程序没有使用到,为什么呢?
procedure TPayForm.Total;
var
  i,s,sum:integer;
begin
  if DM.ADSPay.RecordCount<1 then
    edTotal.Text:=''
  else
    begin
      DM.ADSPay.First;
      sum:=0;
      for i:=0 to DM.ADSPay.RecordCount-1 do
        begin
          s:=StrToInt(DM.ADSPay.FieldByName('pay').AsString);  //为s赋值
          DM.ADSPay.Next;
          sum:=sum+s;
        end;
   end;
end;这个是在窗体创建时开始进行TQuery 控件SQL语句的初始化,可能有问题:
procedure TPayForm.FormCreate(Sender: TObject);
begin
  with DM.ADQPay do
    begin
      Close;
      SQL.Clear;
      //下面的SQL语句可能会有点问题,可是程序没有报错
      SQL.Add('select * from (select  EmName as names, pay from  employee');
      SQL.Add('union select PcName as names , pay from physician');
      SQL.Add('union select NName as names, pay from nurse');
      SQL.Add('union select TcName as names , pay from technician)');
      SQL.Add('a order by names');
      open;
    end;
  DM.ADSPay.Open;
end;

解决方案 »

  1.   

    你只是向SUM赋了值,但是有了值的SUM应该做什么用呢?没有语句, 所以编译器对其进行了优化,就去掉了SUM和S所参与的语句, 并提示你SUM,S有声明但是没有使用.最起码应该是
    procedure TPayForm.Total;
    var
      i,s,sum:integer;
    begin
      if DM.ADSPay.RecordCount<1 then
        edTotal.Text:=''
      else
        begin
          DM.ADSPay.First;
          sum:=0;
          for i:=0 to DM.ADSPay.RecordCount-1 do
            begin
              s:=StrToInt(DM.ADSPay.FieldByName('pay').AsString);  //为s赋值
              DM.ADSPay.Next;
              sum:=sum+s;
            end;
         edTotal.text := IntToStr(Sum)
        end;
    end;
      

  2.   

    谢谢netfly,不过问题好像不是在那里,即使修改后还会出现这个错误:Access Violation at Address 004DE670 in module MVHMIS.exe.Read of address 00000158
    究竟哪里错了呢?
      

  3.   

    “Access violation at address 004B97DF in module 'Project1.exe'.Read of address 00000060”
    点击确定后,依然可以运行。但是我想要的功能没有实现
      

  4.   

    你在IDE里调试一下,看看是什么地方出错,具体是那一行代码
      

  5.   

    TPayForm建立时,数据模块还没有建立,所以出现地址错误,最好把这段代码放在数据模块的建立事件中
      

  6.   

    谢谢maozefa,原来是这个问题啊,终于搞定了~~~