如何访问文本文件(用Microsoft Jet 访问桌面数据库)

Microsoft Jet Text IISAM可以链接和打开以各种字符分界和定长的文本文件。在源文件中,逗号、制表符或者自定义的各种定界符都有效。

一、指定连接信息。

Microsoft Jet访问文件时,仍使用OpenDatabase方法,用该方法中的参数为文本文件指定连接信息,内容如下:

·源数据库类型:文本

·数据库名称:目录的全路径,在该目录中含有要访问的文本文件。

·源表名称:文本文件的名称,包括扩展名。如果不指定扩展名,则用缺省的扩展名.txt

如果在字符分界文件中接连出现两个定界符,则Microsoft Jet将其视为空值。如果在定长文件的数据列中没有数据(空格),则Microsoft Jet也将其视为空值。Microsoft Jet通过直接读取文件或用方案描述信息文件来确定文本文件的格式。方案描述信息文件总是被命名为Schemaini,并且总是与文本数据源存储在的同一个目录下,它向IISAM提供许多信息,其中包括文件的一般格式、列名称和数据类型信息以及其它一些数据特性。在访问定长数据时,必须有Schemaini文件;而当在文本表中包含DateTimeCurrencyDecimal数据或者希望更多地控制表中数据的处理时,应当使用Schemaini文件。

以上这段话摘自VisualBasic 50的联机手册。这段话中的“方案描述信息文件总是被命名为Schemaini”可能有误。据笔者试验,方案描述信息文件应与要链接或打开的文本文件具有相同的文件基本名,其扩展名为.ini。注意,Microsoft Jet不支持多用户访问文本文件。用Microson Jet打开一个文本文件之后,也就独占了对该文件的访问。Microsoft Jet对各种文本表和对象有一些限制,包括:

·字段:不超过255个字符

·字段名称:不超过64个字符

·字段宽度:不超过32766个字符

·记录大小:不超过65000个字节

二、方案描述信息文件。

对文本文件的访问通过方案描述文件来实现。也就是说,为了访问外部文本文件,必须提供方案描述信息文件。该文件提供了文本文件中记录的方案描述,其内容包括以下几个方面。

    • 指定文件名。

      方案描述信息文件的第一个项是文本源文件的名称,该文件名放在方括号内。例如,如果要访问名为Sampletxt的文本文件,则该项应写为: [Sampletxt]

    • 指定文件格式。

方案描述信息文件中的格式选项指定了文本文件的格式,Text IISAM可以从大多数的字符分界文件中自动读取格式。在文本文件中,可以用除了双引号(")以外的任何单个字符作为定界符。方案描述信息文件的格式设置值覆盖了Windows注册表中所有文件的相应设置值。格式选项中的有效值如表所列。

格式设置字符

格式说明符 格式

TabDelimited 文件的字段用制表符定界

CSVDelimited 文件的字段用逗号定界(用逗号定界的值)

Delimited(*) 文件的字段用星号定界,可以使用除了双引号

以外的任何字符代替星号

FixedLength 文件的字段为定长

例如,为了指定用逗号分隔的格式,可以在Schemaini文件中添加如下一行:

FormatCSVDelimited

3.指定字段

在字符分界文本文件中,可以通过以下两种方式指定字段名称:

·把字段名称放在表的第一行中,并把ColNameHeader设置为True

·用数字指定每个列并且指定列名称和数据类型。

注意,必须用数字指定每个列,并且指定列的名称和数据类型,对于定长文件要指定其宽度。字段的数据类型也可以由Microsoft Jet确定。即用MaxScanRows选项指示Microsonft Jet在确定列的类型时应当扫描多少行。如果将MaxScanRows设置为0,则Microsoft Jet将扫描整个文件。方案描述信息文件中的MaxScanRows设置值覆盖了Windows注册表中每个文件的相应设置值。例如:

ColNameHeaderTrue

MaXSCanRows0

将指示Microsoft Jet用表中第一行的数据来确定字段名称,而且扫描整个文件来确定所用的数据类型。表(文本文件)的各个字段通过列号(Coln)选项指定,该选项对于字符分界文件是可选的,而对于定长文件是必需的。Coln的格式如下:

ColnColumnName tyPe [Width#]

Coln项包括以下几个部分:

·ColumnName:列的文本名称。如果列名称含有嵌入的空格,则必须放在双引号中。

·Type:数据类型,可以是以下类型。Microsoft Jet数据类型:BitByteShortLongCurrencvSingleDoubleDateTimeTextMemoODBC数据类型:Char(Text相同)Float(Double相同)Integer(Short相同)LongChar(Memo相同)Date date format

·Width:字符串值Width,指出指定的列的宽度(对于字符分界文件是可选的,而对于定长文件是必需的)

·#:是一个整型数,用来指定列的宽度(如果指定了Width,则必须加代表列宽的整数)

例子:

Col1CustomerNumber Text Width 10

Col2CustomerName Text Width 30

该例给出了方案描述信息文件中与两个字段对应的项,这两个字段分别是:10个字符的CustomerNumber文本字段和30个字符的CustomerName文本字段。

4.选择字符集

可以使用的字符集有两种,即ANSIOEM,可以从中选择一种,通过CharacterSet设置。例如:CharacterSetANSI 把字符集设置为ANSI。如果选择OEM字符集,则方案描述信息文件的CharacterSet设置值覆盖了Windows注量表中每个文件的相应设置值。

相关网址:
http://support.microsoft.com/kb/q149090/

自己写的一个例子:
schema.ini文件:
[ff.txt]
Format=TabDelimited
ColNameHeader=false
Col1="bh" short
Col2="rq" datetime
Col3="sj" datetime
Col4="bc" char

ff.txt文件:
1 2004-9-21 0:00 1900-1-1 16:02 10
1 2004-9-21 0:00 1900-1-1 16:02 10
2 2004-9-21 0:00 1900-1-1 16:02 10
1 2004-9-21 0:00 1900-1-1 16:02 10

在查询分析器执行:
select * from TXT...[ff#txt]
/*结果:
10 1 2004-09-21 00:00:00.000 1900-01-01 16:02:00.000
10 1 2004-09-21 00:00:00.000 1900-01-01 16:02:00.000
10 2 2004-09-21 00:00:00.000 1900-01-01 16:02:00.000
10 1 2004-09-21 00:00:00.000 1900-01-01 16:02:00.000
*/

或:
select * from opendatasource('microsoft.jet.oledb.4.0','text;hdr=no;database=d:/data/')...[ff#txt]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值