我想通过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本身),因此该部分需要另一个脚本或者必须手工完成。
有没有人有线索或给我一个如何解决这个问题的提示?
答案 0 :(得分:4)
我试过这段代码:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("D:\myfile.csv", 1)
Do Until objFile.AtEndOfStream
S = objFile.ReadLine
Debug.Print S
Loop
objFile.Close
在VBA中,它打印了我的CSV文件的所有行,即使最后一行没有以CrLf结尾。
我很确定原因是:objRecordSet.AddNew
缺少objRecordSet.Update
。
显然,如果您在上一个.AddNew
之后拨打.AddNew
,则会保存之前的记录。
但objRecordSet.AddNew
后跟Set objRecordSet = Nothing
并未保存最后一条记录。
解决方案:在循环中添加objRecordSet.Update
作为最后一个命令。
答案 1 :(得分:0)
SAP在后端使用标准数据库引擎。您可以设置链接表,这些链接表直接从SAP提取到Access。没有导出\导入。这是一张现场桌子。
在此处查看:
How do I configure my Microsoft Access database to pull source data directly from SAP BW?