Tquery共用会引起Table is read only吗?(急)(50分)

  • 主题发起人 主题发起人 jiji
  • 开始时间 开始时间
J

jiji

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位大虾:
我用同一个TQuery来执行动态SQL,来对数据库中的数据
进行读取,但我常常在读取完一个表中的数据后,再读取第二
个表中的数据时,就会出现错误说:Table is read only!或
者找不到表中的某一字段。请问,这是什么原因?应如何解决呢?
谢落。
 
把你的代码贴出来看看。
 
产生问题的原因是
1、TQuery.RequestLive为True,
因此Open后会请求返回活动(即可修改)
的数据集
2、实际上数据集可能是非活动(只读)的
例如:
Select Count(*)....
Select Max(..)...
等语句的结果都是只读的,不可能修改

方法1、TQuery.RequestLive设置为False,
不论SQL语句如何,结果都无法修改
方法2、如果有些情况你需要修改就没办法了,
只能你自己写程序时小心,保证RequestLive
取的数据集是活动的。
 
我没有用Select Count(*)....Select Max(..)...这样东东呀。
我只是简单的把数据读出而已。TQUERY有没有说只能读多少数据
的呢?
另:代码太乱了,我不想贴出来了。
 
所谓“读取完一个表中的数据后,再读取第二个表中的数据时”
是什么意思?

还有,"Table is readonly"的确是试图以活动方式打开非活动
数据集时产生的错误。

你仔细检查一下,或把代码寄给我(e.w@263.net)。
 
query1.sql.clear用了吗
还是把代码贴出来
 
是否第二个表已经在别的地方打开并且没有关闭,
如果这样,备份原表,删除原表重建。
 
jiji 也太shy了吧!
 
各位,我在每次用时都有注意用了
with Query do
begin
close;
sql.clear;
sql.add();
open;
end;
但还是出现只读问题,而且在我没要求修改数据的时候它也出现Table is read only
根本就没有给出查询的结果给我。也就是说出现这个问题后,操作就被终止拉。
我现在是用笨方法,就是出现这个问题后,就换一个Tquery,然后就不会出错了。但就是不理解为什么会有这种错误,而且除了换Tquery外,肯定还有更好的方法来解决的。请大家赐教。
 
每次用之前加一个
if State <> dsEdit then Edit;试一试.
 
换一句
open; 改为:
ExecSQL;
因为Open只适用于查询,系统自动将表置为只读状态。

 
把代码mail一份吧zyf423@cyberway.com.sg
 
发生这种现象一般是你在程序中已经打开了一个活动表,然后你又对它进行
第二次打开并进行更改数据的操作,另外还有一种情况就是,你打开了一个
活动表,或者是你仅仅设置了其RequestLive为True,然后在你的SQL语句中
使用了数据库的操作语句,如
SQL.Add('delete from xxx where ...')
一但你打开该查询,此时虽只有一个Query也会引发上述错误的发生,你应
该仔细检查你的代码或你正在使用的环境,光这样说很难使问题切中要害。
 
老兄啊,这问题还没解决吗?接受答案吧,下次给我看到,我帮你结束了。
 
多人接受答案了。
 
后退
顶部