我弄了3个edit控件和一个dbgrid控件,一个button控件
请问如何通过按钮将3个edit的text分别插入到dbgrid控件的3个列里?(其中有id是自动增加的)
procedure TForm1.btn2Click(Sender: TObject);
begin
  ADOQuery1.Active:=False;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('insert into BM (aa,bb,cc) values('''+rzedit1.text+','+rzedit2.text+','+rzedit3.text+''')');
  ADOQuery1.Active:=True;
end;

解决方案 »

  1.   

    values('''+rzedit1.text+''','''+rzedit2.text+''','''+rzedit3.text+''');
      

  2.   

    感谢1楼提出意见,不过遗憾的是,报了错Dataset not in edit or insert mode怎么办?
      

  3.   

    'insert into BM (aa,bb,cc) values('+#39+rzedit1.text+#39+','+#39+rzedit2.text+#39+','+#39+rzedit3.text+#39+')'
      

  4.   

    insert,update,delete等不能用ADOQuery1.Active:=True吧?用ADOQuery1.ExecSQL试试?
      

  5.   

    这个我试了下,结果说:not enough actual parameters 这个错误……怎么办?
      

  6.   

    首先要保证你的数据库连接正确,然后用adoquery.ExecSQL;
      

  7.   

    procedure TForm1.btn2Click(Sender: TObject);
    begin
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('insert into BM (aa,bb,cc) values('+''''+rzedit1.text+''''+','+''''+rzedit2.text+''''+','+''''+rzedit3.text+''''+')');
    //aa,bb,cc字段类型为字符串,如是数字就取消'''': ADOQuery1.SQL.Add('insert into BM (aa,bb,cc) values('+rzedit1.text+','+rzedit2.text+','+rzedit3.text')');
      ADOQuery1.ExceSQL;
    end;
      

  8.   

    这种类型的操作,使用动态参数效果最好。便于书写SQL语句,也利于检查。
      

  9.   

    我是使用dbgrid只用于显示多行记录(browser)
    多个edit用于显示/修改一条记录的多个字段(edit)
    然后由按钮决定是添加还是修改,形成一个sql去提交
    然后dbgrid重新取多行记录,之前记住当前行,之后自动定位到当前行添加或修改后,dbgrid重新取多行记录,效率有点低,不过目前只做到这个程度其实,重新取多行记录 是通过http协议向一个位于iis后面的isapi请求进行的(添加或修改也是向它请求的)——这就是我的client/webserver的实现机制
    只是,添加或修改的sql也是自动生成的,开发者只要把edit/combobox/checklistbox/memo的名字设为 指定前缀+字段名,即可
      

  10.   

    const strsql:string = 'insert into 表 values (%d,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)  ';
    s := Format(strsql,[QuotedStr(),...QuotedStr()]);
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add(s);
    ADOQuery1.ExceSQL;
      

  11.   

    procedure TForm1.btn2Click(Sender: TObject);
    begin
      ADOQuery1.Active:=False;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add(Format('insert into BM (aa,bb,cc) values(''%s'',''%s'',''%s'')',[rzedit1.text, rzedit2.text, rzedit3.text]));
      ADOQuery1.Active:=True;
    end;
      

  12.   

    错了,SORRY。
    procedure TForm1.btn2Click(Sender: TObject);
    var
      SQL: string;
    begin
      SQL := Format('insert into BM (aa,bb,cc) values(''%s'',''%s'',''%s'')',[rzedit1.text, rzedit2.text, rzedit3.text]));
      ADOQuery1.Connection.Execute(SQL );
      ADOQuery1.Active:=False;
      ADOQuery1.Active:=True;
    end;
      

  13.   

    或者:
    procedure TForm1.btn2Click(Sender: TObject);
    begin
      ADOQuery1.Active:=False;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('SELECT * FROM BM');
      ADOQuery1.Active:=True;
      ADOQuery1.Insert;
      ADOQuery1.Fields[0].Value := rzedit1.text;
      ADOQuery1.Fields[1].Value := rzedit2.text;
      ADOQuery1.Fields[2].Value := rzedit3.text;
      ADOQuery1.Post;end;
      

  14.   

    先 写入数据库,然后 通过查询与DBGRID联系  显示出来
      

  15.   

    如果都是字符,且都不为NULL,可以这样写。。
    if adoquery1.state in [dsinsert ,dsedit] then 
      begin
        with adoquery1 do
          begin
            ...
            替换为values('''+rzedit1.text+''','''+rzedit2.text+''','''+rzedit3.text+''');
            ExceSQL;   
          end;
      end;