我用TQuery组件查询后的结果集能不能编辑?为什么Query.Open后的数据集是Readonly?(100分)

  • 主题发起人 主题发起人 lostlastlove
  • 开始时间 开始时间
L

lostlastlove

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要将某年某月的所以记录调出,并修改保存。
我首先用TQuery组件查询后,得到了所要的结果,但是却不能编辑,
为什么Query.Open后的数据集是Readonly?
怎样才能使Query处于编辑状态?
我用Query.edit系统报错!说是不能在一个readonly dateset 进行该操作!

后来我改用TTable组件,但是却不知道怎么能查询出满足上述条件的记录
另外,TTable组件的Filter支持Oracle函数吗?
比如:
Filter:='to_char(date,''YYYY'')=''' + edtYear.text + '''';
Filter:='to_char(date,''MM'')=''' + edtMonth.text + '''';
Filtered:=true;
Table1.open;
能不能实现我查出某年某月的所有记录;
若不行,我该怎么实现?

各位大哥,能不能帮帮我?
 
date 为数据库字段。
edtYear,edtMonth 为TEdit组件
 
通过什么与数据库相连的。
bde?
ado?
看看连接属性
 
你的TQuery的RequestLive是True吗?若你的数据库是ACCESS,就可实现修改.若是ORACLE,
SQL SERVER等你还得加一个UpdateSQL,将TQuery的CachedUpdates改为True.UpdateObject
改为UpdateSQL的名称,将UpdateSQL设好.即可.最好使用TQuery控件.
 
to:cnaoszh :我用的是BDE!

to:zhangkan :
updateSQL我没有用过,请问怎么设置它的属性?能给我说说吗?谢谢了!
 
query.requestlive赋值为true
 
默认情况下,查询结果是只读的。应用程序可以用数据控件去显示查询结果,
但用户不能编辑数据。怎样才能使用户能够编辑数据呢?要使用户能够编辑数据
,必须把TQuery构件的RequestLive属性设为True。不过,把RequestLive属性
设为True并不能保证查询结果一定是可以修改的,因为这还取决于查询使用的是
Local SQL还是与服务器相关的SQL。像查询Paradox或dBASE以及异构查询都是
使用Local SQL,而查询远程服务器则使用与服务器相关的SQL。即使RequestLive
属性设为True,而且查询的是本地数据库,但由于SELECT语句的文法不合适,
BDE也将返回只读的查询结果。因此,在编辑数据之前,先要访问CanModify属性。
只有当这个属性返回True时,才表示查询结果是可编辑的。
 
为什么没有人帮我?
 
早有人帮你了:

来自:terry_lzs, 时间:2001-5-30 9:49:34, ID:546571
query.requestlive赋值为true

当然这个query的查询不能是多表联接的
 
TTable组件的Filter支持Oracle函数吗?
比如:
Filter:='to_char(date,''YYYY'')=''' + edtYear.text + '''';
Filter:='to_char(date,''MM'')=''' + edtMonth.text + '''';
Filtered:=true;
Table1.open;
能不能实现我查出某年某月的所有记录;若不行,我该怎么实现?
date 为数据库字段。
edtYear,edtMonth 为TEdit组件


 
刘李子 的答案已经在上面了。
 
建议:
阅读 《Delphi5程序员指南》。
里面写得很清楚。
 
哪里有DOWN啊?
能告诉我URL吗?
 

解决办法:将query的RequestLive属性设置为true
 
query.requestlive赋值为true
 
把你选的的数据显示在TDBGrid中,让用户选择,用户选中的

记录显示在TEdit控件中。用户修改后,你用程序生成

Update 语句(where 字句中只写主键值),更新数据

库,然后刷新TDBGrid和TEdit控件。
 
多人接受答案了。
 
后退
顶部