我的DBGrid中显示的是用Query查询的一些数据(一个表中)  我想在DBGrid中修改
然后点“提交” 可以存盘  ,该怎么写“提交”中的代码呢?************************
我用了一个UPdatesql控件  但总是改不了  这样写有什么错误?str:='update relation_select_course set grade='+inttostr(x1)+',again_grade='+inttostr(x2)+' where stud=:x1 and course_no=:x2';
with updatesql1 do
begin modifysql.Clear;
 modifysql.Add(str);
  parambyname('x1').asstring:=edit2.Text;
 parambyname('x2').asstring:=combobox3.Text;
 modifysql.BeginUpdate;
end;
showmessage('修改完毕!');
end; //if

解决方案 »

  1.   

    一个表中的数据可以用ADOQuery.Post;直接提交啊,不会自己生成sql语句。
      

  2.   

    TQuery查询是一个表时,直接将TQuery组件的RequestLive 设置成True,你就修改查询产生的DataSet数据,并且奖其写加数据库内。如果TQuery内的SQL命令包含超过一个以上的数据表时,所产生的DataSet将会是一个只读的数据集,如果你将TQuery组件的RequestLive 设置成True,将会得到一个“Table is read only”的错误。Delphi允许你把Tquery先设成CachedUpdates,然后再利用TUpdateSql组件一个一个地把TQuery内变动的数据表更新到数据库内。所以一个Query有多个TUpdateSQL组件与之对应,首先设置TQuery的CachedUpdates为True,RequestLive 为True,放两个TUpdateSQL组件,分别设置Query组件的UpdateObject为UpdateSQL1和UpdateSQL1,然后分别在UpdateSQL1和UpdateSQL2选择菜单UpdateSQL Editor设置MOdify、Insert和Delete语句。
    程序运行时,Query产生的变动都存在Cached Buffer内,只胡执行Query.ApplyUpdates才会写入数据库内,每写入一笔到数据库时,就会调用Query的onUpdateRecord事件一次,这时在QueryUpdateRecord事件中写入如下代码:
       Query.UpdateObject:=UpdateSQL1;
       UpdateSQL1.SetParams(UpdateKind);
       UpdateSQL1.ExecSQL(UpdateKind);
       Query.UpdateObject:=UpdateSQL2;
       UpdateSQL2.SetParams(UpdateKind);
       UpdateSQL2.ExecSQL(UpdateKind);
       UpdateAction:=uaApplied;
    在写数据操作的代码为:
       Query.ApplyUpdates;
       Query.CommitUpdates;
    取消修改操作为:
       Query,CancelUpdates;
      

  3.   

    modifysql你的这个没有提交的啊
    起码的modifysql.execsql呀 才可以把数据提交的