存储过程已经正常调用了,但我在运行后试着加addform.close;就关不掉,出现错误提示:
project project.exe raised exception class EAccessViolation with message 'Access violation at address 00450A5B in module 'project1.exe'.Read of address 00DE4320'.process stopped.Use step or Run to continue.addform是添加页的form名.如果不运行存储过程,是可以关掉的,由于是动态加载的,所以在onclose事件中释放资源:
procedure TaddForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
addform.Free;
addform:=nil;
end;bitbtn2的点击是将form关闭的事件
procedure TaddForm.BitBtn2Click(Sender: TObject);
begin
addform.Close;
end;调用存储过程的代码如下: 
    u2_datamodule.DataModulesys.addSP.Close;
    u2_datamodule.DataModulesys.addSP.ProcedureName:='dbo.st_addproduct1;1';
    u2_datamodule.DataModulesys.addSP.Parameters.CreateParameter('@pro_code',ftstring,pdinput,50,'');
    u2_datamodule.DataModulesys.addSP.Parameters.ParamByName('@pro_code').Value:=edit1.Text;
   u2_datamodule.DataModulesys.addSP.Prepared;
   u2_datamodule.DataModulesys.addSP.ExecProc;
   u2_datamodule.DataModulesys.addSP.Parameters.Clear;不调用存储过程的话,可以用close;将其关闭.
在调用存储过程后是也正常的,可以用form右上角的"X"关闭该form,但是就是不能用close;关闭,一用就出错.我觉得是调用存储过程的代码有问题,但又看不出问题所在,谢谢大家,帮我看下!

解决方案 »

  1.   

    formclose事件里不要写那二行代码...
      

  2.   

    procedure TaddForm.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    addform.Free;
    addform:=nil;
    end;不能这样的写的大哥.
    procedure TaddForm.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action:=caFree;
    end;procedure TaddForm.FormDestory(Sender: TObject);
    begin
      addForm:=nil;
    end;
      

  3.   

    u2_datamodule.DataModulesys.addSP.Prepared;
    u2_datamodule.DataModulesys.addSP.Parameters.Clear;
    都不需要
      

  4.   

    procedure TaddForm.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action:=caFree;
    end;procedure TaddForm.FormDestory(Sender: TObject);
    begin
      addForm:=nil;
    end;
      

  5.   

    恩,可以了
    我还以为
    addform.Free;
    addform:=nil;
    这样也可以呢,谢谢大家了