| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1169 人关注过本帖
标题:select 很奇怪的问题(解决)
只看楼主 加入收藏
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
结帖率:76.47%
收藏
 问题点数:0 回复次数:2 
select 很奇怪的问题(解决)
有一个select 的from tabname来自另一个cursor,在运行程序中报错(1815),但是在vfp9的debugger中却不会报错,运行正常。不知何故? (难道与main.prg有关系)

解决方法:select * from tabname into cursor "cursorname" Nofilter

注释:
CURSOR CursorName [NOFILTER | READWRITE]
 在一个临时表中存储查询结果。
注意:
如果指定了一个已打开表的名称,Visual FoxPro 将产生一条错误信息。SELECT 执行之后,临时表保持打开并为活动,而且除非您指定了 READWRITE 选项,否则它是只读的。关闭该临时表时,它将被删除。通过指定 SORTWORK,临时表可以作为磁盘或卷标上的一个临时文件存在。
 

NOFILTER 创建一个可以用于以后查询的临时表。

注意:
包含 NOFILTER 会降低查询的性能,因为它将在磁盘上创建一个临时表。关闭临时表时,从磁盘上删除临时表。
 *************************************************************************************************

1815错误信息:
“临时表” 必须用 SELECT ... INTO TABLE 创建 (错误 1815)
试图在另一条 SELECT 语句中使用一个重包装(repackaged)的临时表作为来源。

在连续查询中不能使用有些临时表。
使用带 INTO TABLE 子句的 SELECT - SQL 命令代替。

图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册



[此贴子已经被作者于2021-1-22 09:06编辑过]

搜索更多相关主题的帖子: select into 磁盘 查询 临时表 
2021-01-22 06:56
whinda
Rank: 6Rank: 6
等 级:贵宾
威 望:13
帖 子:253
专家分:418
注 册:2012-2-4
收藏
得分:0 
并不是完全这样哦。
set deleted on状态,从cursor再生cursor没任何问题(如果存在状态,切换时要先写一次表才可以)。
程序代码:
set deleted on
select * from diskDBF into cursor curA    &&OK
select * from curA into curA              &&OK
select * from curA into curB              &&OK
*均可以通过

set deleted off状态,从cursor再生cursor通过不过。
程序代码:
set deleted off
select * from diskDBF into cursor curA    &&OK
select * from curA into cursor curA       &&error1815
select * from curA into cursor curB       &&error1815
select * from dbf("curA") into curA       &&OK
select * from dbf("curA") into curB       &&OK

不只是一个简单的nofilter能说明问题的。猜测cursor不能直接再生cursor的原因,很大可能是出于对内存(临时文件)的管理,cursor实际上也是存在于磁盘上的一个文件(临时文件通常以00mp00F87.tmp之类命名),DBF()通过一个alias返一个本地文件名解决了临时文件不能生成cursor的问题。
2021-01-22 17:32
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏
得分:0 
以下是引用whinda在2021-1-22 17:32:28的发言:

并不是完全这样哦。
set deleted on状态,从cursor再生cursor没任何问题(如果存在状态,切换时要先写一次表才可以)。

set deleted on
select * from diskDBF into cursor curA    &&OK
select * from curA into curA              &&OK
select * from curA into curB              &&OK
*均可以通过

set deleted off状态,从cursor再生cursor通过不过。

set deleted off
select * from diskDBF into cursor curA    &&OK
select * from curA into cursor curA       &&error1815
select * from curA into cursor curB       &&error1815
select * from dbf("curA") into curA       &&OK
select * from dbf("curA") into curB       &&OK

不只是一个简单的nofilter能说明问题的。猜测cursor不能直接再生cursor的原因,很大可能是出于对内存(临时文件)的管理,cursor实际上也是存在于磁盘上的一个文件(临时文件通常以00mp00F87.tmp之类命名),DBF()通过一个alias返一个本地文件名解决了临时文件不能生成cursor的问题。


之前也有看到用你的方式引用另一个cursor,只是时间久忘了,多谢提醒!另外,帮助文件的方法可以解决实际问题,具体原因等有空再慢慢研究……


[此贴子已经被作者于2021-1-22 21:46编辑过]

2021-01-22 21:29
快速回复:select 很奇怪的问题(解决)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.124837 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved