Adoquery1:CommandText不返回结果集

时间:2016-05-26 11:56:32

标签: sql delphi

procedure TForm1.Button1Click(Sender: TObject);
begin    
  ADOQuery1.close;    
  ADOQuery1.SQL.text:='insert into veresiye (product,price,piece,total) 
                                     VALUES (:par0,:par1,:par2,:par3)';    
  ADOQuery1.Parameters.ParamByName('par0').Value:=Edit1.Text;    
  ADOQuery1.Parameters.ParamByName('par1').Value:=Edit2.Text;    
  ADOQuery1.Parameters.ParamByName('par2').Value:=Edit3.Text;    
  ADOQuery1.Parameters.ParamByName('par3').Value:=Edit4.Text;    
  ADOQuery1.Open;    
  ADOQuery1.ExecSQL;
end;

我收到此错误消息:

  

Adoquery1:CommandText不返回结果集

为什么我会收到此错误以及如何解决?

3 个答案:

答案 0 :(得分:7)

  

调用ExecSQL来执行当前分配给的SQL语句   SQL属性。 使用ExecSQL执行不返回的查询   游标到数据(例如INSERT,UPDATE,DELETE和CREATE TABLE)。

     

ExecSQL返回一个反映行数的整数值   受执行的SQL语句影响。注意:对于SELECT语句,   调用Open而不是ExecSQL或将Active属性设置为true 。至   速度性能,应用程序通常应该准备查询   通过在调用ExecSQL之前将Prepared属性设置为true   第一次。

来源:http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/ADODB_TADOQuery_ExecSQL.html

要在表使用中插入值:

  ADOQuery1.close;    
  ADOQuery1.SQL.text:='insert into veresiye (product,price,piece,total) 
                                     VALUES (:par0,:par1,:par2,:par3)';    
  ADOQuery1.Parameters.ParamByName('par0').Value:=Edit1.Text;    
  ADOQuery1.Parameters.ParamByName('par1').Value:=Edit2.Text;    
  ADOQuery1.Parameters.ParamByName('par2').Value:=Edit3.Text;    
  ADOQuery1.Parameters.ParamByName('par3').Value:=Edit4.Text;     
  ADOQuery1.ExecSQL;

从表使用中获取值:

  ADOQuery1.close;    
  ADOQuery1.SQL.text:='select * from veresiye';       
  ADOQuery1.Open;

答案 1 :(得分:4)

您只需删除对

的调用即可
ADOQuery1.Open;

Open用于打开查询返回的数据集。这也相当于设置ADOQuery1.Active := true。在这种情况下,INSERT语句不会返回数据集,因此无需打开任何内容。

ExecSQL用于执行不返回结果数据集的语句,因此您只需要在此处使用。

答案 2 :(得分:1)

在表格中插入值:

ADOQuery1.Close;
ADOQuery1.SQL.text:='insert into veresiye (product,price,piece,total) 
                                 VALUES (:par0,:par1,:par2,:par3)';
ADOQuery1.Parameters.ParamByName('par0').Value:=Edit1.Text;
ADOQuery1.Parameters.ParamByName('par1').Value:=Edit2.Text;    
ADOQuery1.Parameters.ParamByName('par2').Value:=Edit3.Text;    
ADOQuery1.Parameters.ParamByName('par3').Value:=Edit4.Text;     
Try 
  ADOQuery1.ExecSQL;
except on E: Exception do
  MessageDlg(E.Message,mtError,[mbOK],0);
End;