大家帮忙看下 总是出现CANNOT PERFORM .......ON AN CLOSED DATASET 先谢谢大家了
begin
try
query1.Close;
query1.SQL.Add('insert into 考核表 (职员编号,月份,常规版面头条,财经文体版头条,其他稿件,深度报道,独家报道,现场报道,月度好稿,漏稿处罚)values(:tmp1,:tmp2,:tmp3,:tmp4,:tmp5,:tmp6,:tmp7,:tmp8,:tmp9,:tmp10)');
query1.ParamByName('tmp1').AsString:=edit1.Text;
query1.ParamByName('tmp2').AsString:=formatdatetime('yyyy-mm',datetimepicker1.datetime); 
query1.ParamByName('tmp3').Value:=edit3.Text;
query1.ParamByName('tmp4').Value:=edit4.Text;
query1.ParamByName('tmp5').Value:=edit5.Text;
query1.ParamByName('tmp6').Value:=edit6.Text;
query1.ParamByName('tmp7').Value:=edit8.Text;
query1.ParamByName('tmp8').Value:=edit9.Text;
query1.ParamByName('tmp9').Value:=edit10.Text;
query1.ParamByName('tmp10').Value:=edit11.Text;
query1.Prepare;
query1.ExecSQL;
query1.Close;
query1.SQL.Clear;
query1.sql.add('exec sf_考核设置');
query1.Prepare;
query1.ExecSQL;
button5.Click;
MessageBox(handle,'恭喜,新增成功', '提示',MB_OK);
except
  on e:EDBEngineError do
  showmessage('职员编号不存在或输入了重复数据,请重新输入!');
end;
end;
end;

解决方案 »

  1.   

    你应该看看button5.click里执行了什么
      

  2.   

    看不出个所以然,你可以按2楼的方法去掉看下,行不行得通,但我觉得第二个SQL执行存储过程哪个query1.execsql.你改成open看下.因为你的语句是exec 存储过程名.
    试试吧不是OPEN就是EXECSQL的问题.
      

  3.   

    都不行啊,真郁闷 button5里是
    procedure TForm5.Button5Click(Sender: TObject);
    begin
    query1.Close;
    query1.SQL.Clear;
    query1.SQL.Add('select 考核表.职员编号,职员基本信息表.姓名,考核表.月份,考核表.常规版面头条,考核表.财经文体版头条,考核表.其他稿件,考核表.深度报道,考核表.独家报道,考核表.现场报道,考核表.月度好稿,考核表.漏稿处罚,考核表.月度总分,考核表.绩效'+'奖金 from 考核表,职员基本信息表 where 考核表.职员编号=职员基本信息表.职员编号');
    query1.Open;
    edit1.Text:='';edit3.Text:='';
    edit4.Text:='';
    edit5.Text:='';
    edit6.Text:='';edit8.Text:='';
    edit9.Text:='';
    edit10.Text:='';
    edit11.Text:='';end;
      

  4.   

    begin 
    if not query1.ADOConnection.Connected then
      query1.ADOConnection.Open;//打开连结试试
    try 
    query1.Close; 
    query1.SQL.Add('insert into 考核表 (职员编号,月份,常规版面头条,财经文体版头条,其他稿件,深度报道,独家报道,现场报道,月度好稿,漏稿处罚)values(:tmp1,:tmp2,:tmp3,:tmp4,:tmp5,:tmp6,:tmp7,:tmp8,:tmp9,:tmp10)'); 
    query1.ParamByName('tmp1').AsString:=edit1.Text; 
    query1.ParamByName('tmp2').AsString:=formatdatetime('yyyy-mm',datetimepicker1.datetime);  
    ..............
      

  5.   

    begin  
    if not query1.ADOConnection.Connected then 
      query1.ADOConnection.Open;//打开连结试试 
    我用的是BDE啊