我想向数据库中插入一个值,不过有个字段,有多个值,所以要插入N次在行,我将插入的SQL语句放到循环体中,总是报COMMANDTEXT RESULT 无反回值,这是什么问题.
    
    帮忙改一下,哈哈
procedure Tlendbookf.BitBtn1Click(Sender: TObject);
var
   query : TADOQuery;
   i : integer;
   str : array of string;
begin
     
     try
     query := TADOQuery.Create(self);
     query.Connection := dm.ADOConnection1;
     for i := 0 to listbox1.items.count - 1 do
     begin     query.SQL.Add('select id from book_info where name ='''+listbox1.Items.Strings[i]+'''');
     query.Open;
     SetLength(str,listbox1.items.count);
     if query.RecordCount=1 then
     str[i]:= query.FieldValues['id'];
     query.Close;
     end;     for i:=low(str) to HIGH(str) do     begin
     showmessage(str[0]);
     query.SQL.Clear;
     query.SQL.Add('insert into lend_book(cardid,id,lenddate,state) values(:cardid,:id,:lenddate,:state)');
     query.Parameters.ParamByName('cardid').Value := Edit1.Text;
     query.Parameters.ParamByName('id').Value := str[0];
     query.Parameters.ParamByName('lenddate').Value := LeftStr(datetimetostr(now),pos(' ',datetimetostr(now)));
     query.Parameters.ParamByName('state').Value := 1;
     query.Open;
     query.Close;
     end;
     ListBox3.Items.Clear ;
     ListBox1.Items.Clear;
     showmessage('成功完成借书工作!');     except
      showmessage('借书失败!');
     end;
end;

解决方案 »

  1.   

    query.SQL.Add('insert into lend_book(cardid,id,lenddate,state) values(:cardid,:id,:lenddate,:state)');
         query.Parameters.ParamByName('cardid').Value := Edit1.Text;
         query.Parameters.ParamByName('id').Value := str[0];
         query.Parameters.ParamByName('lenddate').Value := LeftStr(datetimetostr(now),pos(' ',datetimetostr(now)));
         query.Parameters.ParamByName('state').Value := 1;
         query.Open;
         query.Close;
         end;{
         query.Open;   這句錯了換成這個就行了。。  query.ExecSQL  }
      

  2.   

    补充一点:
    for i := 0 to listbox1.items.count - 1 do
         begin
         Query.SQL.Clear;   //加上这句
         query.SQL.Add('select id from book_info where name ='''+listbox1.Items.Strings[i]+'''');
      

  3.   

    请用以下格式:
    var
      sSql:string;
      i:   integer;
    begin
      sSql:='begin';
      for i to XXX do
      begin
        sSql:= sSql+ 'insert into TableName Value .....'
      end;
      sSql:= sSql+ 'commit;end;';
    end;
    清晰又不易出错。
      

  4.   

    对不起,上面错了。
    var
      sSql:string;
      i:   integer;
    begin
      sSql:='';
      for i to XXX do
      begin
        sSql:= sSql+ 'insert into TableName Value .....'
      end;
      sSql:= 'begin'+Sql+ 'commit;end;';
    end;