dataset使用的TQuery,sql语句是:
select 
studentid,
name,
graduateschool,
department,
schoolinglength,
graduatetype,
releasedate,
modifyman 
from stu 
where studentid='1'把TQuery.RequestLive:=true,而且database组件的readonly是false,
但是每当TQuery.Edit时,却提示dataset是readonly的,没办法在DBGrid里修改

解决方案 »

  1.   

    database为readonly当然没方法改。
      

  2.   

    建议使用缓存更新,结合 TUpdateSQL使用。
      

  3.   

    如果是你用了可视的TQuery 控件那么你要在 Object Inspector 修改 TQuery的 RequestLive 为true ,然后 用 Query1.Edit 就可以在DBGrid里修改数据.
    如果不放心可以用 Query1.State 属性 
    在db.pas里声明 
     TDataSet = class(TComponent, IProviderSupport)
      ......  public
      ......   
        property State: TDataSetState read FState;
    这里
    TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey,
        dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead,
        dsInternalCalc, dsOpening);sInactive  表明数据集控件 is closed, so its data is unavailable.dsEdit     表明数据集控件可以编辑dsBrowse   Data can be viewed, but not changed. This is the default                      state of an open dataset.
    其他的可以看 delphi 的帮助.
      

  4.   

    换用ADODataSet,可以修改查询后的数据并自动更新回各个库。
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
       Query1.Edit;
       if Query1.State = dsEdit then
        begin
         // add your method。
        end;
    end;
      

  6.   

    修改完后 要 Query1.post 提交