小弟想用一个新的label1、labe2和edit1、edit2来修改当前DbGrid 中的内容。
用一个按bottom 的事件来保存当前edit1、edit2的内容。为什么老是提示出错啊?
下面是代码:
var
   adoquery1:Tadoquery;
begin
with ADOQuery1 do
 begin
  ADOQuery1:= TADOQuery.Create(self);
  ADOQuery1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+'database\jf.mdb'+';Persist Security Info=False;';
  ADOQuery1.close;
  close;
  sql.clear;
  sql.add('select * from tposition');
  sql.add('where  职位编号="'+edit1.Text+'" or 职位名称="'+edit2.text+'"');
  open;
  fieldbyname('职位编号').asstring:=edit1.Text;
  fieldbyname('职位名称').asstring:=edit2.Text;
  post;
  close;
如果在open  语句后加一条edit为什么会新增一条记录啊,我只是想修改当前的记录的内容啊!请就高手指点.

解决方案 »

  1.   

    open后面加
    try
    edit;
    fieldbyname....
    ..
    post;
    finally;
      

  2.   

    adoquery1与datasource设置了关连吗?你这是动态创建的,所以呢要设置关连,
    你只是查询出来了,数据集处于浏览状态,当你要插入或修改记录时,一定要把数据集设置为insert或edit状态才行,
      

  3.   

    在open之前加edit,不过你这样数据库表中的数据还不是一样呀!
      

  4.   

    open;
    if recordcount =0 then append else edit;
      fieldbyname('职位编号').asstring:=edit1.Text;
      fieldbyname('职位名称').asstring:=edit2.Text;
      post;
      close;
      

  5.   

    我是动态创建的啊!
    在前open 使用edit 还是出错啊!
      

  6.   

    如果在open 后加edit 出现的是新增一条记录,而不是保存修改的内容
      

  7.   

    open 之后可以这样写:open;
    if Recordset.RecordCount>0 then
    begin
      Edit;
      ...
      post;
    end;
    这样就不会添加数据了。