在网上找啊找,终于找到一个同样问题的解答,按照最后的注册表设置,问题总算是解决了。 网文如下: 连接字符串:
(1)ODBC:connstr="Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=d:\data\;Extensions=asc,csv,tab,txt;"
(2)OLEDB:connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\;Extended Properties=""text;HDR=Yes;FMT=Delimited"""
注意: <1>路径,即dbq或data source,只到目录一级,不指定文件名(在sql语句中指定)
<2>HDR=YES,表示数据的第一行作为表的标题行,也就是列名,可以用这些列名来筛选数据,进行关联什么的。
如果HDR=NO,则表示第一行开始就是数据了,那么列名自动的就是F1,F2,F3…………
可以用rs("F1"),rs("F2")等来引用,也可以在sql中用它们来筛选数据等等。
<3>FMT=Delimited,表示用默认的分隔符,而通常默认的分隔符就是逗号了。
这个默认值在注册表的
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text\Format
位置下,默认是CSVDelimited,可以修改成Delimited(;)或Delimited(|)等等。
<4>如果某个列没有值,也就是直接两个逗号,中间什么都没有,那么对应的值是NULL,注意判断。
<5>关于数据类型的判定。 OLE DB驱动是根据数据的值来推断数据类型的……所以有时就推断的不对了。
以下是摘录:
Jet 和 ODBC 提供程序将返回占多数的类型的数据,但对于占少数的数据类型,则会返回 NULL(空)值。如果该列中两种类型数据的数量相等,提供程序将优先选择数字型数据,放弃文本型数据。
例如: • 在被扫描的八 (8) 行中,如果该列包含五 (5) 个数字值和三 (3) 个文本值,则提供程序将返回五 (5) 个数字和三 (3) 个空值。 • 在被扫描的八 (8) 行中,如果该列包含三 (3) 个数字值和五 (5) 个文本值,则提供程序将返回三 (3) 个空值和五 (5) 个文本值。 • 在被扫描的八 (8) 行中,如果该列包含四 (4) 个数字值和四 (4) 个文本值,则提供程序将返回四 (4) 个数字和四 (4) 个空值。
作为解决只读数据问题的一种替代方法,可在连接字符串的“扩展属性”部分中使用“IMEX=1”这一设置来启用导入模式。这可强制执行 ImportMixedTypes=Text 注册表设置。但在此模式下,执行更新操作时可能会出现意外的结果。
注意,连接串里有IMEX=1,还不够,还得修改注册表,将ImportMixedTypes设置为Text才行。(我没试出来,加上还是不行哦,怪。)
注册表位置同上。
[此贴子已经被作者于2007-11-8 23:23:40编辑过] |