Aquery.sql.text:='select * from table';
Aquery.open;
我执行上面语句后,不能执行编辑、插入等操作。但执行下面语句时就能执行编辑、插入等操作了。
Aquery.sql.text:='select r.*,r.rowid from table r';
Aquery.open;
请问各位高手,这是什么原因,你们在对oracle数据库的查询后的记录进行编辑、插入操作时,查询语句如何写???多谢!!!!!!

解决方案 »

  1.   

    query1.sql.add('select * from table');
    query1.open;
    //注意是不是数据集的readonly为true,数据集是不是固定字段
      

  2.   

    我不知你用哪个版本的BDE或ADO,我用oracle+BDE+d6,没有你说的问题,
    一般情况下,如果用BDE的TQuery,打开的数据是只读的,可改TQuery的RequestLive属性为true,就可以对数据进行操作了(我一般不用,我会用内存临时表,如 TClientDataSet,最后用SQL对oracle的表进行操作)
    另外,RequestLive:=true后,oracle要求对sql的字段及表名用大写(oracle一般只用大写,小写不可用)
      

  3.   

    我用的是odac连接oracle,没有RequestLive
      

  4.   

    如果是ADO的话,更应该没问题,换个provider试试
    (ADO连oracle有两个provider,一个是M$ OLE DB provider for oracle,另一个为oracle provider for OLE DB)
    另外,建立内存临时表可直接用Data Access中的TClientDataSet构件,它可以新建字段,并作为一个TDataSet使用.可以与DBgrid相连,进行输入数据,然后读出它的数据再写入oracle
    具体可参见它的HELP
      

  5.   

    你用PL/SQL DEVELOPER登陆ORACLE,执行这两条语句看看就知道有什么区别了。
      

  6.   

    同意realx(iambird) ( 一级(初级)) 信誉:100  2006-03-30 13:58:00  得分:0

    你用PL/SQL DEVELOPER登陆ORACLE,执行这两条语句看看就知道有什么区别了。
      

  7.   

    select * from table 这条语句当有几个用户试图操作时,系统会将表锁定,只能第一个用户使用,
    而'select r.*,r.rowid from table r'就可以多人同时操作(修改/添加)数据库了.象你这种情况由于ADO对ORACLE的支持不是很好建议你用底三方的ORACLE数据组件,且提交数据做好用INSERT语句,便于事件控制.
      

  8.   

    oraquery设一个索引字段,这是必须的。
      

  9.   

    楼主说的这个问题,我也遇见过,包括专门针对oracle数据库查看编辑工具里也是这样的,在oracle中rowid起了至关重要的作用,是oracle建表时隐藏的关键字段。一般情况在查询语句中最好不要加入rowid,编辑、插入时也很少用rowid。