急!!(Access 2000+D6)为什么我将Query的RequestLive设为 TRUE以后,一插入数据就说是: Table Is Read Only!

L

lixx

Unregistered / Unconfirmed
GUEST, unregistred user!
急!!(Access 2000+D6)为什么我将Query的RequestLive设为 TRUE以后,一插入数据就说是: Table Is Read Only! 我已经将源代码贴了出来,大家都来看看这个怪问题. 在线等候! (50分)<br />为什么我将 Quer y的 RequestLive 设为 TRUE以后,
一插入数据就说是: Table Is Read Only!
我将 RequestLive 设为FALSE 以后,就可以插入数据了。
(Access 2000+D6)
我之所以把RequestLive是为了利用
query1.delete
来删除当前记录.
如果将RequestLive 设为FALSE,将不能利用上面的语句删除当前记录了.
 
数据操作不单是与这个属性有关,而且还是与数据库中的设置有关的,你可以在TQuery
的SQL中写语句来解决问题
 
请检查你的数据库是否设置为只读属性
 
》nexthawks
可是我改了个属性之后,什么又都好了啊!其它属性我又没有动,还能是什么问题呢?

》taxtax
数据库文件绝对不是只读的!我已经检查过N遍了。

这个问题我以前问过,可是没人给出一个正确的解释,希望这次……
 
怎么会由这种问题?
你的原程序大吗?
发给我,看一下
 
放置一个UpdateSQL,然后设置Query的CatchUpdate=True、Query的UpdateSQL等于那个UpdateSQL
这样就可以了。
 
和你query的sql语句有关,sql语句太复杂,那么它本身不具备live的话,
打开live开关更新数据时会报上述错误,
如果是较简单的select * from table就是具备生命的,换句话说,就是你的sql语句
太复杂,系统根据sql语句无法更改你的数据到实际的数据中去.
 
requestlive属性为true时 有以下限制
1 只涉及一个表;
2 sql语句中不能包含 order by sum 或 avg 运算符
3 select 后的字段列表中不能含有计算字段,where 部分只能包含字段值或常量的比较运算
 
统一楼上的
 
只是简单的
insert into tablename(字段名列表)
values(数据值列表) // 这里用到了 Parambyname

就这么简单!
 
下面是我的源代码
Project中有一个主窗体和一个DataModual
在主窗体中三个按钮: 查询(Button1)、添加(Button2)、删除(Button3) 和一个DBGrid1
在DataModual中有二个控件:Query1 、DataSource1

//查询代码
procedure TForm1.Button1Click(Sender: TObject);
begin
DBGrid1.DataSource := Dm.DataSource1; //首先将主窗体中的DBGrid1的DataSource属性设置
with dm.Query1 do
begin
close;
sql.Clear;
sql.Add('select * from QualityReport');
prepare;
open;
end;
end;

//插入数据
procedure TForm1.Button2Click(Sender: TObject);
begin
DBGrid1.DataSource := Dm.DataSource1;
with dm.Query1 do
begin
close;
sql.Clear;
sql.Add('insert into QualityReport(Name,SteelNo,TotalWeight)');
sql.add('values(''lixx'',''12'',20)');
prepare;
execsql;
end;

end;

//删除 Query1 中的当前记录。(前提是已经进行过查询,此处不表)
procedure TForm1.Button3Click(Sender: TObject);
begin
dm.Query1.Delete;
end;

问题:
1。若将 DataModual 窗体中的 Query1的RequestLive 设为FALSE ,则
插入数据的动作可以进行,但删除Query当前记录的动作就不能进行!
2。若将 DataModual 窗体中的 Query1的RequestLive 设为,则TRUE
插入数据的动作不能可以进行,但删除Query当前记录的动作可以进行!

注意:
以上说的修改属性,均是指设计时修改。我原本打算在运行时修改,比如
插入数据时先将 RequestLive 设为FALSE
删除当前记录时将 RequestLive 设为TRUE
好像根本不行!似乎必须是在设计时修改!
但是设计时修改,插入数据和删除当前记录就不能兼顾了,难道果真如此吗?


哪位富翁可否解释一下?
Access2000 + D6

 
1。若将 DataModual 窗体中的 Query1的RequestLive 设为FALSE ,则
插入数据的动作可以进行,但删除Query当前记录的动作就不能进行!
因为你的插入是使用SQL语句进行的,而删除是使用Query本身的方法实现的。两个不同。
RequireLive设置为False,就不能通过Query本身的方法对数据库进行写操作了。
比如,你使用Query.Insert,同样蹦叉。
 
2。若将 DataModual 窗体中的 Query1的RequestLive 设为,则TRUE
插入数据的动作不能可以进行,但删除Query当前记录的动作可以进行

此时既可以删除,也可以增加,只是你可能没有看清楚数据库的实际内容。
因为你的两个操作都是使用了同一个SQL,同时,你插入以后还需要重新读取一次才能够看见。
你在这里对一个数据库的操作使用了SQL和Query本身方法两种办法,建议你改成一种。
全部SQL就使用Insert ... Delete from table1 where ....
使用Query方法:Query1.Insert ; Query1.Append;Query1.Delete等。
 
你在用QUERY执行没有返回记录集的SQL语句时不能把它的requestlive设为TRUE
 
》yzhshi
>>>2。若将 DataModual 窗体中的 Query1的RequestLive 设为,则TRUE
>>> 插入数据的动作不能可以进行,但删除Query当前记录的动作可以进行

>>>此时既可以删除,也可以增加,只是你可能没有看清楚数据库的实际内容。
此时确实是不能插入数据,给出的警告是:Table Is Read Only

 
顶部