第十六节 通过SQL查询与文本文件交换数据
有时候我们的数据来源是文本文件或者有时想把表中的数据导出为文本文件以便于交换,我们就必须与文本文件打交道了。在ACCESS中,我们可以像对待数据库表一样对待纯文本文件,可以把文本文件所在的文件夹当做是包含关系表的数据库,把文本文件本身当成一个表,这样我们就可以像操作外部数据库中的表一样操作文本文件了。当然我们也可以使用SQL语句来选择字段,查询记录或生成交叉表查询等。下面我们先来研究一下它的基本语法结构:
一、查询纯文本文件的SQL语句基本语法
[textfilename] IN {["path" "TEXT;HDR=yes;FMT=Delimited;"] | ["" [TEXT;
HDR=yes;FMT=Delimited;DATABASE = path]]}
其实在MS ACCESS的SQL查询中主要支持的是以逗号分隔的纯文本文件,以CSV格式常见,其它的用的比较少,我们这里也不探讨了。查询文本文件的SQL语句包含以下内容:
项目
|
说明
|
Textfilename
|
文本文档名,这里应是命名,包括主文件名和扩展文件名。
|
Path
|
文本文档所在的文件,应该是一条完整的路径。
|
TEXT
|
是指定数据库的类型。
|
HDR
|
是标题的意思,设置为YES时就是包含标题行,设置为NO时就是不包含标题行。
|
FMT
|
是文档中的数据的分隔格式,可以是Delimited、Fixed、TabDelimited、CSVDelimited、Delimited (x)及FixedLength等。
|
需要说明的是在ACCESS
2016中测试时,“Delimited、TabDelimited和CSVDelimited”的效果是一样的,都是默认的逗号分隔的文本,不知道其它版本怎样,由于没有测试环境,也可能是16版的BUG,请测试出来的朋友告诉我一下,谢了。
上面只列出了一条基本语法,其实文本文档既可以当作目标文档,也可以当作数据来源文档,只是操作的效果不同,在SQL语句中对文本文档的引用的写法是一样的。从语法结构式中我们可以看出,在语句中可以有多写法,下面我们来结合实例分别介绍。
二、用SQL语句导入文本文档
在我的D盘的“D:\SQL for ACCESS”文件夹是有一个名称为“学生成绩示例.CSV”的文本文档,如图16-1所示:
图16-1:示例文本文档及所在目录
我们双击打开此文本文档,可以看到如图16-2所示的内容:
图16-2:逗号分隔的文本文档的内容
现在我们要将其内容导入到MS
ACCESS的数据库中,使用以下语句:
Insert INTO 学生成绩
Select *
FROM
[TEXT;HDR=yes;FMT=CSVDelimited;DATABASE=D:\SQL for ACCESS\;].学生成绩示例.CSV;
执行后得到图16-3所示的结果:
图16-3:导入TXT文本文件的数据表
同样的功能,我们也可以写成其它格式的语句,效果是一样的,大家可以自行测试。这些格式为:
其一:
Insert INTO 学生成绩
Select *
FROM [学生成绩示例.CSV]
IN 'D:\SQL for
ACCESS\'
'TEXT;
HDR=yes;
FMT=CSVDelimited;
CHARACTERSET=UNICODE;';
其二:
Insert INTO 学生成绩
Select *
FROM [学生成绩示例.CSV]
IN '' [TEXT;
HDR=yes;
FMT=CSVDelimited;
CHARACTERSET=UNICODE;
DATABASE=D:\SQL for ACCESS];
三、用SQL语句将表中数据导出到文本文件中
MS ACCESS不仅能导入文本文件,而且也可以将数据库表中的记录导出到文本文件中,用SQL语句实现起来与前面的示例差不多,只是将文本文档当作输出的目标表处理就可以了。比如我们现在要将数据库中的“学生成绩”表导出为逗号分隔的文本文档,保存到D盘的根目录下,实现语句如下:
Select *
INTO [TEXT;
HDR=yes;
FMT=CSVDelimited;
DATABASE=D:\;].学生成绩示例.CSV
FROM 学生成绩;
执行后效果如图16-4所示:
图16-4:用SQL语句导出表记录到文本文档
打开查看与前面的图16-1相同,在此就不再给出了。SQL查询语句也可以这样写:
Select *
INTO [学生成绩示例.CSV]
IN '' [TEXT;
HDR=yes;
FMT=CSVDelimited;
DATABASE=D:\;]
FROM 学生成绩;
或者这样写:
Select *
INTO [学生成绩示例.CSV]
IN 'D:\' [TEXT;
HDR=yes;
FMT=CSVDelimited;]
FROM 学生成绩;
好了,今天就到这里,其它特续……