导入文本文件时如何指定字段类型?
来源:互联网 发布:常州哪里有单片机卖 编辑:程序博客网 时间:2024/06/10 00:29
问题:
如何让 ACCESS 按照我规定的构架、规格从文本文件、XLS文档中导入数据?
方法一:
操作步骤如下:
菜单 -> 文件 -> 获取外部数据 -> 导入(或者是“链接表”) -> 选择你需要得格式得文件 -> 高级菜单 -> 文件 -> 获取外部数据 -> 导入(或者是“链接表”)
图片如下:
选择你需要得格式得文件
图片如下:
点击“高级”按钮
图片如下:
在“导入规格”中定义字段规格,定义完成后按“保存”按钮
图片如下:
选择合适得规格名
图片如下:
定义完成后得字段规格存储在 MSysIMEXColumns 以及 MSysIMEXSpecs 表中
图片如下:
完成上述操作后,以后就不用再重新定义了,可以使用以下语句链接或者导入文本文件
DoCmd.TransferText acImportDelim, "list1 导入规格", "list1", "C:\list1.txt"
关于 TransferText 方法请参考以下资料(摘自 Access XP 帮助)
TransferText 方法
在 Visual Basic 中,TransferText 方法执行 TransferText 操作。
expression.TransferText(TransferType, SpecificationName, TableName, FileName, HasFieldNames, HTMLTableName, CodePage)
expression 必需。返回“Applies To”列表中的一个对象的表达式。
TransferType 可选 AcTextTransferType。
AcTextTransferType 可以是下列 AcTextTransferType 常量之一:
acExportDelim
acExportFixed
acExportHTML
acExportMerge
acImportDelim 默认
acImportFixed
acImportHTML
acLinkDelim
acLinkFixed
acLinkHTML
如果将该参数留空,则采用默认常量 (acImportDelim)。
注意 可以链接到文本文件或 HTML 文件中的数据上,但数据在 Microsoft Access 中是只读的。
在 Microsoft Access 项目(Microsoft Access 项目:与 Microsoft SQL Server 数据库连接且用于创建客户/服务器应用程序的 Access 文件。项目文件中不包含任何数据或基于数据定义的对象(如表或视图)。) (.adp) 中仅支持 acImportDelim、acImportFixed、acExportDelim、acExportFixed 或 acExportMerge 转换类型。
SpecificationName 可选 Variant 型。字符串表达式(字符串表达式:任一求值为一列连续字符的表达式。表达式的元素可以包括:返回字符串或字符串 Variant (VarType 8) 的函数;字符串字面值、常量、变量或 Variant。),表示在当前数据库中创建并保存的导入或导出规格的名称。对于固定长度的文本文件, 必须指定参数或使用 schema.ini 文件,该文件还必须保存在导入、链接或导出的文本文件的同一个文件夹中。若要创建一个方案文件, 可使用文本导入/导出向导创建此文件。对于分隔的文本文件和 Microsoft Word 邮件合并数据文件,可以将该参数留空,以便选择默认的导入/导出规格。
TableName 可选 Variant 型。字符串表达式,表示要向其导入文本数据、从中导出文本数据或链接文本数据的 Microsoft Access 表的名称,或者要将其结果导出到文本文件的 Microsoft Access 查询(查询:有关表中所存数据的问题,或要对数据执行操作的请求。查询可以将多个表中的数据放在一起,以作为窗体、报表或数据访问页的数据源。)的名称。
FileName 可选 Variant 型。字符串表达式,表示要从中导入、导出到或链接到的文本文件的完整名称(包括路径)。
HasFieldNames 可选 Variant 型。使用 True (-1) 可以在导入、导出或链接时,使用文本文件中的第一行作为字段名。使用 False (0) 可以将文本文件中的第一行看成普通数据。如果将该参数留空,则采用默认值 (False)。该参数将被 Microsoft Word 邮件合并数据文件忽略,这些文件的第一行中必须包含字段名。
HTMLTableNam 可选 Variant 型。字符串表达式,表示要导入或链接的 HTML 文件中的表或列表的名称。除非 transfertype 参数设为 acImportHTML 或 acLinkHTML,否则该参数将被忽略。如果将该参数留空,则导入或链接 HTML 文件中的第一个表或列表。如果 HTML 文件中存在 <CAPTION> 标记,则 HTML 文件的表或列表名称取决于该标记指定的文本。如果没有 <CAPTION> 标记,则名称由 <TITLE> 标记指定的文本决定。如果有多个表或列表具有相同的名称,则 Microsoft Access 将通过给每个表或列表名称结尾添加一个数字,如“雇员1”和“雇员2”来区分它们。
CodePage 可选 Variant 型。Long(Long 数据类型:存储大型整数的基础数据类型。Long 变量存储为 32 位数的值,范围介于 2,147,483,648 到 2,147,483,647 之间。) 型值,用于标识代码页的字符集。
说明
有关该操作及其参数如何使用的详细信息,请参阅该操作的主题。
语法中的可选参数允许留空,但是必须包含参数的逗号。如果将位于末端的参数留空,则在指定的最后一个参数后面不需使用逗号。
注意 通过设置 Recordset 对象的 ActiveConnection 属性,也可使用 ActiveX 数据对象 (ADO)(数据访问对象 (DAO):一种数据访问接口,与 Microsoft Jet 和符合 ODBC 的数据源通讯,以连接到、检索、操作和更新数据和数据库结构。) 来创建链接。
示例
下面的示例使用规范“标准输出”,从 Microsoft Access 表“外部报表” 将数据导出到带有分隔符的文本文件 April.doc 中:
DoCmd.TransferText acExportDelim, "Standard Output", _
"External Report", "C:\Txtfiles\April.doc"
方法二:
作用:Schema.ini用于提供文本文件中记录的构架信息。每个 Schema.ini 项都用于指定表的五个特征之一:
1、文本文件名
2、文件格式
3、字段名、字段长度、字段类型
4、字符集
5、特别数据类型转换
指定文件名
文件名要用方括号括起来,例如如果要对 Sample.txt 使用数据构架信息文件,那么它的对应的项应该是
指定文件格式
Format=Delimited(自定义分隔符)
- 或者没有分隔符 -
Format=Delimited( )
固定宽度文件中的字段为固定长度cg1留言,经测试,参数为:Format=FixedLength
指定字段
你可以有两种方法在一个字符分隔的文本文件中指定字段名
1、在文本文件中的第一行包含字段名,并且设置 ColNameHeader 为 True 。
2、用数字编号指定每一列并且指定每一列的名字以及数据类型
你必须用数字编号指定每一列并且指定每一列的名字、数据类型以及长度(在固定长度分隔的文本文件中需要指定长度)
注意,设定了 ColNameHeader 选项,在 Schema.ini 中 Windows 注册时会忽略 FirstRowHasNames 选项。
你也可以指定字段的数据类型,使用 MaxScanRows 选项用来指定在确定列的数据类型时要扫描多少行数据。设置 MaxScanRows 为 0 将扫描整个文件。
如果文本文件第一行包含字段名,并且要扫描整个文件,改项目就要定义如下:
MaxScanRows=0
接下来的项目用来指定表中的字段,使用列编号(Coln)选项来指定列。字段长度在“固定分隔文本文件中”是必填项目,在“字符分隔文本文件”中是可选项目。
示例:定义 2 个字段,CustomerNumber 是长度为 10 的文本字段、CustomerName 是长度为 30 的文本字段。
Col2=CustomerName Text Width 30
语法如下:
Col[I]n[/I]=[I]ColumnName[/I] type [Width #]
参数解释如下:
数据类型包括:
Microsoft Jet 数据类型:Bit Byte Short Long Currency Single Double DateTime Text Memo
ODBC 数据类型: Char (same as Text) Float (same as Double) Integer (same as Short) LongChar (same as Memo) Datedate format
其中date format 是日期的格式字符串例如:Date YYYY-MM-DD
Width字符串的长度,后面的数字用来指定字段的长度(“固定分隔文本文件”为必填,“文字分隔文本文件”为可选)#整形数字,标识字段长度指定字符集
CharacterSet 项有两个选择:ANSI | OEM
选择 ANSI 字符集用如下方法:
特别数据类型转换
特别数据类型转换主要是定义比如日期、货币型数据如何转换或者如何显示的,你可以参考下面这张表:
· Currency symbol prefix with no separation ($1)
· Currency symbol suffix with no separation (1$)
· Currency symbol prefix with one character separation ($ 1)
· Currency symbol suffix with one character separation (1 $)
· ($1)
· –$1
· $–1
· $1–
· (1$)
· –1$
· 1–$
· 1$–
· –1 $
· –$ 1
· 1 $–
· $ 1–
· $ –1
· 1– $
· ($ 1)
· (1 $)
This example shows the dollar sign, but you should replace it with the appropriate CurrencySymbol value in the actual program.
下面给出一个简单的例子,假设有一个表Contacts.txt类似下面:
王海 上海有机化学研究所 2002-1-1
罗炙 数字化机床研究院 2004-1-1
导入 Access 应该类似下面表格:
那么 Schema.ini 则是类似下面的INI文件:
ColNameHeader=True
format=Delimited(" ")
MaxScanRows=0
CharacterSet=ANSI
Col1="姓名" Char Width 10
Col2="单位" Char Width 9
Col3="联系日期" Date Width 8
注释如下:
ColNameHeader=True ///带有表头
format=Delimited( ) ///空格作为分隔符,如果是分号,请用format=Delimited(;) 来解决
MaxScanRows=0 ///扫描整个文件
CharacterSet=ANSI ///ANSI 字符集
Col1="姓名" Char Width 10 ///字段1
Col2="单位" Char Width 9 ///字段2
Col3="联系日期" Date Width 8 ///字段3
///如果有更多字段可 Col4 .... ColN
注意,Schema.ini 必须和需要导入的文本文件在同一目录。
此后,我们就可以利用下面的语句来导入数据了:
CurrentProject.Connection.Execute "SELECT * INTO NewContact FROM [Text;FMT=Delimited;HDR=Yes;DATABASE=C:\;].[Contacts#txt];"注意,到 2000 格式的 MDB 为止,以下语句都会导致导入失败,应该是 Access 本身的问题:
到 Access XP / access 2003 出现不知道是否已经解决该问题,大家可以在“评论”中告诉我测试结果。
或者
DoCmd.TransferText acImportFixed, "C:\.ini", "Contacts", "C:\Documents.txt"
错误消息为:
运行时错误 '3625':
文本文件规范 'c:schema.ini' 不存在。不能使用规范进行导入、导出或者链接。
或者
运行时错误 '2511':
这个操作或方法需要一个 Specification Name 参数。
另外,请参考:
http://support.microsoft.com/default.aspx?scid=kb;en-us;241477
这里还有个示例提供下载:
http://access911.net/down/eg/importtext.rar
- 导入文本文件时如何指定字段类型
- 导入文本文件时如何指定字段类型?
- 导入文本文件时如何指定字段类型?(一)
- 导入文本文件时如何指定字段类型?(二)
- 导入文本文件时如何指定字段类型?(二)
- 导入文本文件时如何指定字段类型?(一)
- 导入文本文件时如何指定字段类型?(一)
- 导入文本文件时如何指定字段类型?(二)
- sqoop指定多个字段导入类型
- 导入SHP文件时如何标注指定属性字段
- 如何导入long类型的字段
- 在Access中创建表及如何指定字段类型
- 在Access中创建表及如何指定字段类型
- 如何导入指定表?
- 如何导入指定表?
- 取得数据字段值时必须指定返回类型[基础]
- 从文本文件提取数据到数据库指定的字段中
- sqoop导入时删除string类型字段的特殊字符
- dasdwqwedwqeqweqweqweqwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
- WordPress官方函数参考
- 我的第一个iOS App从开发到上线经历
- WordPress官方中文所有文档
- Linux 2.6.11 MTD驱动情景分析
- 导入文本文件时如何指定字段类型?
- U-Boot的设备管理
- WordPress官方模板标签文档
- 汉诺塔问题,递归
- Failed to create the Java Virtual Machine
- 身份证号码验证方法
- C语言输入以空格隔开字符串存入数组,直到遇到回车停下
- 吸血鬼数字
- dblp解析--一种比较蠢的方法