标题:select 使用经验 (12)
只看楼主
jjjlan
Rank: 1
等 级:新手上路
帖 子:67
专家分:0
注 册:2004-11-24
 问题点数:0 回复次数:0 
select 使用经验 (12)

在网络环境下,Visual FoxPro再将查询结果储存至您于INTO TABLE DBF参数所指定的表文件后,会立即依专用模式将它打开,且不管SET EXCUSIVE命令设定为何。 在网络的环境下,如何利用into table dbf参数中所建立的表文件只是做暂存之用,请使用RIGHT(SYS(2015),8)产生一唯一文件名乘坐为此暂存表文件的名称,以避免程序同时执行时数据彼此覆盖。例如:

tmpdbf=RIGHT(SYS(2015),8)

SELECT * FROM employee

INTO TABLE (tmpdbf)

。。。

。。。

USE IN (tmpdbf)

ERASE (tmpdbf)+“.DBF” 值得注意的是,INTO DBF或INTO TABLE参数所指定之用来存放查询结果的表文件将是一个独立存在的表文件(Free Table)——亦即它不隶属于任何一个数据库。 如果您希望将查询结果储存智谋一个数据库的表中,必须在利用DATABASE Database参数来指定数据库的名称,不过此一数据库必须已经存在,否则将发生错误。以下面的命令叙述而言,表示将查询结果储存至数据库TEMP的表test中: SELECT * FROM employee INTO TABLE test DATABASE temp 一旦使用DATABASE DatabaseName 参数制订了数据库的名称,就可以再加上NAME LongTABLEName参数来指定表于数据库中的长名称。以下面的命令叙述而言,表示将查询结果储存之数据库TEMP的表test中,并以MediaTEMPTable作为表的长名称: SELECT * FROM employee INTO TABLE test DATABASE temp MediaTEMPTable INTO CURSOR CusorName [NOFILTER] 于SQL SELECT命令叙述中加入INTO CURSOR CursorName参数,表示将查询结果储存至CusorName参数所指定名称的虚拟暂存表中。在SQL中,所谓的“CURSOR”指的是一个虚拟暂存表。不过请大家注意,CursorName参数所指定的虚拟暂存表的名称不能够与一个已经打开之表的别名相同,此外,虚拟暂存表名称也不能以数字开头,若发生这两种情况之一,将会造成错误。 事实上严格说起来,利用 INTO CURSOR CusorName所指定的虚拟暂存表(以下简称Cursor)并不是表。因为根据内存的容量于是用于SELECT 命令中的参数,很可能几乎所有的时间Cursor皆仅存在于内存之中,他们甚至根本从未在磁盘上出现过。正由于此项特点,Cursor被建立及被取用时的速度要比正常的表快上许多。注意:假如内存无法完全容下Cusors,Cusors会议暂存文件.TMP的形式存放在组态项目SORTWORK所指定的磁盘目录下。

一旦您是关闭表的命令(USE、USE IN、CLEAR ALL、CLOSE ALL、CLOSE TABLES与CLOSE DATABASE)来关闭Cursors,Cursors便随即永远消失,升值在文件俄删除操作上Cursors被删除的速度亦是最快的。基于以上理由,使用Cursors做为程序中的暂存表文件无疑是最恰当不过的了。 我们必须强调,在SELECT命令中加入INTO CURSOR参数所产生之Cursors是“只读”(Read-Only)的,亦即您不能对它进行任何写入的动作——包括新增、修改、删除、及编制索引。因此我们通常利用Cursors 来作为报表、更新一个真实表或浏览的数据来源。(在 Visual FoxPro 7.0 中 Cursor 可以设定为可读写) 在SELECT命令一被执行后,此虚拟暂存表便会被打开并成为作用表,但是究竟Cursors 会被打开与哪一个工作区中则无法测知,因此您只能使用Cursors 的别名来取用它。 如果您希望查询结果能永久的保存,则必须使用INTO DBF|TABLE TableName|将查询结果存入一个真实表文件中。 在一个复杂的数据库处理操作中,我们很可能必须透过多道SQL SELECT命令的查询、统计与运算查理才能求得所需的结果,而在其过程中,您很可能希望将某一个查询结果的Cursors 作为另外一个SQL SELECT命令的查询来源,然而在预设状态下,这是不被允许的。以下面的程序代码而言,当执行第二道SQL SELECT命令时,便会出现错误: SELECT * FROM employee INTO CURSOR Media SELECT * FROM Media 如果您希望将某一个查询的Cursors作为另外一个SQL SELECT 命令的查询来源,必须与希望作为查询来源之INTO CURSOR参数中加入关键字NOFILTER,以前面的简例而言,若能改写如下便是正确的: SELECT * FROM employee INTO CURSOR Media NOFILTER SELECT * FROM Media 然而不讳言的,由于加入关键字NOFILTER后一定会在磁盘上建立暂存文件,因此会稍稍影响查询的速度。当此Cursors被关闭时,其暂存文件会自动从磁盘上删除。 TO FILE FILENAME [ADDITIVE] 利用TO FILE FILENAME参数,您可以将查询结果储存至FILENAME参数所指定名称的ASCII文本文件中,此文本见的预设后缀名为.TXT。如果您希望目前的查询结果增添至文本文件FILENAME原先以存在内容之尾端而不覆盖掉其原有之数据,请再加入关键字ADDITIVE。例如: SELECT * FROM employee TO FILE test ADDITIVE 如果您希望将查询结果输出于一文本文件的同时,不要将此查询结果显示于Visual FoxPro的桌面上,请再加入克选择性的关键字NOCONSOLE。例如: SELECT * FROM employee TO FILE test ADDITIVE NOCONSOLE TO PRINT [PROMPT] TO PRINT 参数会将SELECT命令的查询结果输出于打印机。例如: SELECT * FROM employee TO PRINTER 如果您于TO PRINTER参数后方在加入关键字PROMPT,则在开始打印前会先显示“打印”对话框,以便让您选择用来打印的打印机以及调整打印机的机关设定,不过此对话框种的设定选项将因您所安装至打印机的不同而有所不同。

如果您希望将查询结果输出于打印的同时,不要将此查询结果显示于Visual FoxPro的桌面上,清在加入可选择性的关键字NOCONSOLE。例如: SELECT * FROM employee TO PRINTER PROMPT NOCONSOLE TO SCREEN 如果您希望将查询结果输出于Visual FoxPro的桌面上,请加入TO SCREEN参数。当由SELECT 命令所产生至查询结果的行数过多而无法一次于一页屏幕画面显示完毕时,Visual FoxPro的会在每显示一页后即暂停,并要求您按任一键继续显示。如果您不需要此中每显示一页即暂停的处理,而希望一次显示完毕,请加入关键字NOWAIT。例如: SELECT * FROM employee TO SCREEN NOWAIT

搜索更多相关主题的帖子: select 网络 经验 SYS TABLE 
2005-06-18 13:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-21124-1-1.html




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

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