我想在DBGrid中双击一项记录后通过调用如下自定义过程来将修改的数据提交到数据库中
可是程序执行后数据库中的数据并没有改变,为什么?请高手给我写出您的实现代码。
procedure TForm1.MyDblClick;
begin
if dbgrid1.Fields[4].AsString<>'Yes' then
begin
if checkinput() then
 begin
    dbgrid1.Columns.Items[4].Color:=clwhite;
    with dbgrid1.DataSource.DataSet do
    begin
    edit;
    gotobook(pointer(dbgrid1.SelectedRows.items[0]));
    edit;
    fieldByName('HasPic').AsString:='Yes';
    dbgrid1.Fields[4].Asstring:='Yes';
    post;
    end;

解决方案 »

  1.   

    因为你指向的数据表在使用DBGRID双击时
    DATASET就已经在你要求修改的那个记录上了
    所以改成这样应该可以了
    with dbgrid1.DataSource.DataSet do
    begin
     if fields[4].asstring<>'yes' then
    if  checkinput() //不明白你这个是什么用 then
    begin
     fieldByName('HasPic').AsString:='Yes';
     fields[4].asstring:='yes' 
    end;
    end;
      

  2.   

    呵呵少了EDIT
    with dbgrid1.DataSource.DataSet do
    begin
     if fields[4].asstring<>'yes' then
    if  checkinput() //不明白你这个是什么用 then
    begin
     edit;
     fieldByName('HasPic').AsString:='Yes';
     fields[4].asstring:='yes' 
     post;
    end;
    end;
    此外
    你的dbgrid1.DataSource.DataSet 必须是一个可以编辑的对象(table或REQUESTALIVE的QUERY)
    而且“CACHEDUPDATE”等属性为FALSE时,
    上面语句才会有效改变数据
    否则还要加入“applyupdates”来更新你的修改
      

  3.   

    TO: lxl(蚊蚊) 
    我用的是ADOQuery
      

  4.   

    Checkinput()是用来防止用户选择多项记录的检查函数
      

  5.   

    对于ADOQUERY而言
    我在我的机子上试过了
    上面的修改还是一样有效