数据库问题:QUERY 为什么是只读(关于requestLive属性)

cocochuong 2000-08-31 01:50:00
有以下程序:
Query1.SQL.Add('select * from table1 where Type=:iType and LastCre
ateDate=NULL ');
Query1.ParamByName('iType').AsInteger:=i;
Query1.Open;
Query1.Edit;
Query1.FieldByName('LastCreateDate'):=Now;
Query1.Post;

当Query1.RequestLive属性为false时,程序执行到Edit时出错,
此时报错说Read Only.但query1里面有数据。
可把该属性改为true时,程序执行到Open时出错:
Invalid use of keyword.
Token: null
Line Number: 1
这句话的意思应该是NULL错误吧?

但为什么requestlive属性为false时,该SQL语句是正确的呢?

如果这样不行,哪位大侠能告诉我如何能修改query中的字段数据。

...全文
140 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcw 2000-09-01
  • 打赏
  • 举报
回复
你可以把这个
Query1.First;
while not Query1.Eof do
begin
Query2.SQL....(该句与query1中某个字段有关系)
根据Query2的结果再对Query1中某些字段进行操作。
end;

也写成SQL语句呀,把query1和query2的语句合并一起,统一用SQL处理。


iamxia 2000-08-31
  • 打赏
  • 举报
回复
用QUERY生成的结果是一张视图(VIEW),它只是将结果集以视图的形式显示出来,既然是视图当然是不能直接修改的,因为它是只读。视图并不是真正存在,它是虚拟的。
cocochuong 2000-08-31
  • 打赏
  • 举报
回复
我一般也是用UpdateSQL,可由于这次是要遍历数据库的。
源程序如下:

...
Query1.First;
while not Query1.Eof do
begin
Query2.SQL....(该句与query1中某个字段有关系)
根据Query2的结果再对Query1中某些字段进行操作。
end;

所以这种程序结构不太适合用UpdateSQL

AP 2000-08-31
  • 打赏
  • 举报
回复
用 UpdateSQL 最好,修改完以后用 ApplyUpdate CommitUpdate.
zcw 2000-08-31
  • 打赏
  • 举报
回复
修改query中的数据要结合updatesql控件;
请看delphi的Help\Examples\Update的例子

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧