【发布时间】:2016-02-02 17:42:28
【问题描述】:
我想通过 VBScript 将 .csv 文件中的一些数据导入 MS Access 数据库。
Sub CSVImport
connStr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=P:\somedatabase.accdb"
'Define object type
Set objConn = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
'Open Connection
objConn.open connStr
objRecordSet.Open "SELECT * FROM SomeTable", _
objConn, adOpenStatic, adLockOptimistic
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("P:\someFile.csv")
Do Until objFile.AtEndOfStream
strVKBL_Stamm = objFile.ReadLine
arrVKBL_Stamm = Split(strVKBL_Stamm, ";")
objRecordSet.AddNew
objRecordSet("FirstName") = arrVKBL_Stamm(0)
objRecordSet("LastName") = arrVKBL_Stamm(1)
objRecordSet("Date") = arrVKBL_Stamm(...)
objRecordSet("Type") = arrVKBL_Stamm(11)
Loop
Set objRecordSet = Nothing
Set objFSO = Nothing
Set objFile = Nothing
Set objConn = Nothing
End Sub
此脚本从我的 CSV 文件中获取所有数据,但它确实错过了最后一行。当我在 .csv 末尾点击两次返回(一次不够)时,我的所有数据都会被导入。
我的备用计划是将AtEndOfStream 位更改为类似
If arrVKBL_Stamm(0) = 0 Then
Exit Do
并在文件中添加一个零。问题是,.csv 是从 SAP 导出的报告(这是 - afaik - 无法导出到 MS Access 本身),因此该部分需要另一个脚本或必须手动完成。
有没有人有线索或提示我如何解决这个问题?
【问题讨论】:
-
您发布的代码会引发错误,这不仅是因为缺少
End Sub,还因为您正在尝试修改已关闭的记录集。请出示您的实际代码。 -
添加了其余部分,不确定这是否能说明问题。但我希望如此。 :)
-
您的代码仍然无法运行。您永远不会打开文件,也永远不会在
objRecordSet中添加新记录。 minimal reproducible example -
愚蠢的我,把那部分编辑掉了,由于一些错误捕获块,代码有点混乱。现在在里面。对不起。
-
你如何打开你的文件? // 叹息
标签: vba csv ms-access vbscript