注册 登录
编程论坛 VFP论坛

一个奇怪的问题

laowan001 发布于 2023-05-04 17:34, 1990 次点击
一个程序,已经用了几年了,一直没问题,今天突然报错

临时表不能被修改,因为它包含了未保存的记录

出错语句:update a set a.字段1=b.字段1 FROM 表1 a,表2 b where a.id=b.id
表1和表2都是cursor,非只读,内容是正常的,字段没问题

这么多年,还是头回见到这个错误

请教各位,这是哪里出了问题?

[此贴子已经被作者于2023-5-4 17:38编辑过]

20 回复
#2
gs25367856782023-05-04 18:02
我从来就没有用过临时表
你修改成正式表一定能解决。
#3
吹水佬2023-05-04 18:10
表1或表2有无同时用在其他地方(如控件的数据源)
#4
吹水佬2023-05-04 18:13
或者试试先执行FLUSH,如:
FLUSH IN "表1"
FLUSH IN "表2"
#5
schtg2023-05-04 18:15
回复 楼主 laowan001
可能其他冲突所致吧
#6
laowan0012023-05-04 18:23
以下是引用吹水佬在2023-5-4 18:13:57的发言:

或者试试先执行FLUSH,如:
FLUSH IN "表1"
FLUSH IN "表2"


还是老样子
#7
laowan0012023-05-04 18:24
以下是引用吹水佬在2023-5-4 18:10:47的发言:

表1或表2有无同时用在其他地方(如控件的数据源)

表1是一个grid的数据源,表2是新生成的cursor
#8
sdta2023-05-04 18:38
同名临时表未关闭?
#9
laowan0012023-05-04 18:40
以下是引用sdta在2023-5-4 18:38:39的发言:

同名临时表未关闭?

cursor如果同名的话,会覆盖原来的内容
#10
laowan0012023-05-04 18:40
以下是引用schtg在2023-5-4 18:15:33的发言:

可能其他冲突所致吧

不清楚啊
#11
laowan0012023-05-04 18:43
以下是引用吹水佬在2023-5-4 18:10:47的发言:

表1或表2有无同时用在其他地方(如控件的数据源)

重新生成了cursor,暂时解除grid的数据源指定,现在没事了

但在没事之前,还出现另一句程序出现同样的错误,但后来又没事了

感谢吹版

但奇怪的是,一直都是这么用,很长时间了也没问题啊,怎么今天突然出现了
#12
laowan0012023-05-04 19:12
以下是引用gs2536785678在2023-5-4 18:02:50的发言:

我从来就没有用过临时表
你修改成正式表一定能解决。


我这个系统,5年多了,订单记录至今4802W条,对应的作业数据也是相同的量级,其他的表就不算了,客户端除了一个数据字典(300+记录)是正式表,其他全部都是临时表,正式数据全部在服务器上
#13
shizi02023-05-04 23:14
可能与临时表建索引、绑定的对象Grid允许insert之类有关系,总之,应该是你最近改了其他对象什么地方,但你没意识到跟临时表有关。
#14
laowan0012023-05-05 07:55
以下是引用shizi0在2023-5-4 23:14:19的发言:

可能与临时表建索引、绑定的对象Grid允许insert之类有关系,总之,应该是你最近改了其他对象什么地方,但你没意识到跟临时表有关。

感谢回复。
这个程序已经好久没动过了,天天都用,而且上午还在用,下午就出现问题了,挺怪的
#15
独木星空2023-05-05 08:29
你们讨论的很好,好久不来了,向各位版主及网友打声招呼,特别是laowan001,吹水佬,在程序上的帮助。
#16
bbschf2023-05-21 05:25
回复 楼主 laowan001
你有其它地方在使用此表
#17
laowan0012023-05-21 07:39
以下是引用bbschf在2023-5-21 05:25:05的发言:

你有其它地方在使用此表


这个表只在当前表单中一个grid里用,数据是从数据库下载的,所以也没有其他表单同时使用的问题
#18
bbschf2023-05-21 09:44
回复 17楼 laowan001
我搞的临表,在其他在方引用 的多,mousedown,click及其他的地方用timer事件等 ,正常使用没问题,就是不能监听,一监听就提示只读
#19
laowan0012023-05-21 10:47
以下是引用bbschf在2023-5-21 09:44:21的发言:

 我搞的临表,在其他在方引用 的多,mousedown,click及其他的地方用timer事件等 ,正常使用没问题,就是不能监听,一监听就提示只读

grid的事件里肯定会涉及这个表。
我是喜欢把功能做的相对独立,这样维护和升级比较方便,所以就算是可以重复使用的表,在每个表单中都是要单独下载数据的
另外,你说的只读是不是要在生成临时表的时候指定一下可读写?
#20
bbschf2023-05-21 10:53
只有在select sql查询语句中需要声明是否可读写,create cursor都是可读写的
#21
laowan0012023-05-21 11:15
回复 20楼 bbschf
对的
1