把edit.text内容写入数据库,程序执行后提示:不能从单一执行程序返回多个数据集。怎么回事阿?程序如下:
procedure TForm3.Button1Click(Sender: TObject);
begin
     adoquery1.Close;
     adoquery1.SQL.Clear;
     adoquery1.SQL.Add('insert into 库存 values(:名称,:型号)');
     adoquery1.Parameters.ParamByName('名称').Value:=trim(edit1.Text);
     adoquery1.Parameters.ParamByName('型号').Value:=trim(edit2.Text);
     adoquery1.ExecSQL;
     adoquery1.Open;
end;
//-------------------------------------
换成adoquery1.sql.add('insert into 库存 (名称,型号)values('''+edit1.text+''','''+edit2.text''')');
也不行,还是同个buge 怎么回事啊?

解决方案 »

  1.   

    adoquery 执行select语句时用open;执行其他语句时用execsql
      

  2.   

    execsql执行了sql语句,可以写进数据库啊,但是在软件的界面上不能体现出数据库的变化,如果想在界面上看到数据库的变化,就在adoquery1.open之前加上一句adoquery1.close
      

  3.   

    除了select语句用open,其他语句用ExecSQL
      

  4.   

    除了select语句用open,其他语句用ExecSQL luxuewei5214(小卢) 说的对,,你试试
      

  5.   

    除了上面说的外,还有就是字符串的问题。可以这样用#39+Trim(edit1.text)+#39
      

  6.   


    除了select语句用open,其他语句用ExecSQL 
    去掉去掉adoquery1.Open;就可以了
      

  7.   

    procedure TForm3.Button1Click(Sender: TObject);
    begin
         adoquery1.Close;
         adoquery1.SQL.Clear;
         adoquery1.SQL.Add('insert into 库存 values(:名称,:型号)');
         adoquery1.Parameters.ParamByName('名称').Value:=trim(edit1.Text);
         adoquery1.Parameters.ParamByName('型号').Value:=trim(edit2.Text);
         adoquery1.Open;
    end;
      

  8.   

    楼主你ExecSQL完紧接着就再来一个Open,肯定是不行的,open的时候adoquery的sql语句还没变,相当于再把原来的sql语句执行一遍,这显然不合逻辑~~~
      

  9.   

    注adoquery1只能用于查询
    你使用adocommand控件,并加一个连接
    procedure TForm3.Button1Click(Sender: TObject);
    beginadocommand.text:='insert inot 库存 values(名称,型号) values ('''+edit1.Text+''','''+edit2.Text+''');
    adocommand.execute;    
    end;
      

  10.   

    注adoquery1只能用于查询
    ---------------------------
    谁说的... - -
    关于Open和ExecSQL,准确来说,是返回数据集的用Open(包括执行有数据集返回的存储过程), 不返回数据集的用ExecSQL,楼上多位朋友已提到.