Aquery.sql.text:='select * from table';
Aquery.open;
我执行上面语句后,不能执行编辑、插入等操作。但执行下面语句时就能执行编辑、插入等操作了。
Aquery.sql.text:='select r.*,r.rowid from table r';
Aquery.open;
请问各位高手,这是什么原因,你们在对oracle数据库的查询后的记录进行编辑、插入操作时,查询语句如何写???多谢!!!!!!
Aquery.open;
我执行上面语句后,不能执行编辑、插入等操作。但执行下面语句时就能执行编辑、插入等操作了。
Aquery.sql.text:='select r.*,r.rowid from table r';
Aquery.open;
请问各位高手,这是什么原因,你们在对oracle数据库的查询后的记录进行编辑、插入操作时,查询语句如何写???多谢!!!!!!
query1.open;
//注意是不是数据集的readonly为true,数据集是不是固定字段
一般情况下,如果用BDE的TQuery,打开的数据是只读的,可改TQuery的RequestLive属性为true,就可以对数据进行操作了(我一般不用,我会用内存临时表,如 TClientDataSet,最后用SQL对oracle的表进行操作)
另外,RequestLive:=true后,oracle要求对sql的字段及表名用大写(oracle一般只用大写,小写不可用)
(ADO连oracle有两个provider,一个是M$ OLE DB provider for oracle,另一个为oracle provider for OLE DB)
另外,建立内存临时表可直接用Data Access中的TClientDataSet构件,它可以新建字段,并作为一个TDataSet使用.可以与DBgrid相连,进行输入数据,然后读出它的数据再写入oracle
具体可参见它的HELP
?
你用PL/SQL DEVELOPER登陆ORACLE,执行这两条语句看看就知道有什么区别了。
而'select r.*,r.rowid from table r'就可以多人同时操作(修改/添加)数据库了.象你这种情况由于ADO对ORACLE的支持不是很好建议你用底三方的ORACLE数据组件,且提交数据做好用INSERT语句,便于事件控制.