我用的是odac控键,不是BDE
with OraQuery1 do
begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * from mce order by mce');
    open;  
    append;
    fields[0].AsString := 'tttwww';
    post;
  end;
就提示:readonly dataset??
救急!!!!1

解决方案 »

  1.   

    OraQuery1 
    本身设置只读属性了码?
      

  2.   

    OraQuery1用的是默认值,qraQuery1的readOnly是false
      

  3.   

    首先我可以告诉你,如果不那个mce不是主键, 去掉了那个order by ,他就不是只读了。Query和 Table 得到的东西不同,Query得到的结果是视图,视图能被修改是需要很多条件限制的,大部分数据库引擎都尽可能得让你能修改视图。Query提供了 CanModify属性,
    if Query1.CanModify then
      Query1.RequestLive:= true;
    这时候才表明能修改。
    对于视图的修改你可以用TUpdateSQL结合 Query来完成,这一点BDE做得非常的好。看一些数据库理论方面的书,
      

  4.   

    去掉了那个order by 也不行呀
    有没有知道ODAC的大哥呀?!!
      

  5.   

    你仔细看看控件的属性,是不是哪儿设置错了.我以前用的是query,它的属性requestlive设为true就可以修改了.不知有没有帮助?
      

  6.   

    试试我的方法 with OraQuery1 do
    begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT * from mce ');//去掉order by
        open;  
        Insert;
        fields[0].AsString := 'tttwww';
        if state in [dsInsert] then 
    post;
      end;
      

  7.   

    order by mce没什么问题
    建议使用query+TUpdateSQL
      

  8.   

    那TUpdateSQL里的insert语句要怎么写呢
    写  Insert;
        fields[0].AsString := 'tttwww';
        post;
    可以么?
      

  9.   

    建议去看李维的“Delphi7.0高效数据库管理”
      

  10.   

    正常情况下,你让 TUpdateSQL 自动生成的代码就行了
      

  11.   

    这个好像是因为 Oracle 数据库驱动程序的原因。
    你选择的是哪种驱动?如果选择的是Ms For Oracle 的驱动,那么返回的数据集是只读的。我建议用 Update,或者Insert 好些,毕竟这样效率也高些。
      

  12.   

    Oraquery1 的RequestLive属性设为true
      

  13.   

    Oraquery1 的RequestLive属性设为true建议用 Update或Insert
      

  14.   

    建议用UpdateSQL控件。
    在TQuery的UpdateObject选择添加的UpdateSQL。
    双击UpdateSQL控件,选择主键和更新字段。单击Generate SQL并翻到SQL页对语句进行适当的修改。
      

  15.   

    Query1.RequestLive:= true;
    refresh;
      

  16.   

    动态设置Query1的属性RequestLive为 true;
      

  17.   

    在你的代码中加入:Query1.RequestLive:= true;绝对行