我想导入该代码的文本文件导入Access 2007数据库文件:
Dim test As New cAccess
test.Connect()
test.Command.Connection = test.Connection
test.Command.CommandText =
"insert into kvks " &
"select f1 as artnr, f2 as [lfdnr-kal], f3 as saln, f4 as suchbegriff, f5 as wert, f6 as eh " &
"from [Text;FMT=Delimited;HDR=No;CharacterSet=850;DATABASE=" & txtKvks.Text.Substring(0, txtKvks.Text.LastIndexOf("\")) & "].[" & txtKvks.Text.Substring(txtKvks.Text.LastIndexOf("\") + 1) & "]"
Dim start As DateTime = Now
test.Command.ExecuteNonQuery()
但我得到的错误“没有为一个或多个必需的参数给定值”。
该文本文件分隔的分号( ;
)。 起初我以为,这是因为它承认一行作为一个字段,因为标准的逗号分隔符,然后当然另一个字段缺失。
我插在同一个目录中,该文件被保存过一个schema.ini文件,但相同的结果。
可能是什么问题呢?
此错误的一个可能的原因是,使用时SCHEMA.INI与Jet / ACE“文本”文件引擎的HDR=No
在条款[Text;...]
数据库将被忽略。
因此,对于名为现有的表[MyExistingTable]
CREATE TABLE MyExistingTable (
id INT,
firstname TEXT(255)
)
名为“toImport.txt”的文本文件
1;Larry
2;Hank
3;Artie
和“SCHEMA.INI”文件
[toImport.txt]
Format=Delimited(;)
命令
cmd.CommandText =
"INSERT INTO MyExistingTable " &
"SELECT F1 AS id, F2 AS firstname " &
"FROM [Text;FMT=Delimited;HDR=No;CharacterSet=850;DATABASE=C:\Users\Public].[toImport.txt];"
会失败,因为它会解释“toImport.txt”的第一行作为列名: [1]
和[Larry]
,而不是默认的[F1]
和[F2]
时没有包括列名被分配。
最简单的解决方法是添加ColNameHeader=False
的“SCHEMA.INI”文件
[toImport.txt]
Format=Delimited(;)
ColNameHeader=False
你也可以变得更加复杂,并添加完整的柱规格进入“SCHEMA.INI”文件(请参阅文档获取详细信息)。
另一个可能的原因:
该错误还可以通过被保存为UTF-8 BOM(字节顺序标记)为“SCHEMA.INI”文件引起的。 喷气机“文本”引擎预先日期Unicode和仅支持两种字符集- “ANSI”或“OEM” - 两个数据文件和“SCHEMA.INI”文件。