Vba 正在将.csv导入MS Access&引用;AtEndOfStream“;不';我不读最后一行
我想通过VBScript将一些数据从.csv文件导入MS Access数据库Vba 正在将.csv导入MS Access&引用;AtEndOfStream“;不';我不读最后一行,vba,csv,ms-access,vbscript,Vba,Csv,Ms Access,Vbscript,我想通过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("AD
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结尾两次点击return(一次不够)时,我的所有数据都会被导入
我的备份计划是将AtEndOfStream
位更改为
If arrVKBL_Stamm(0) = 0 Then
Exit Do
并在文件中添加一个零。问题是,.csv是一个从SAP导出的报告(它是-afaik-无法导出到MS Access本身),因此该部分需要另一个脚本或必须手动完成
有没有人能给我一些线索或提示来解决这个问题?我试过以下代码:
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
作为循环中的最后一个命令。我尝试了以下代码:
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
作为循环中的最后一个命令。SAP在后端使用标准数据库引擎。您可以设置直接从SAP中提取到Access的链接表。没有导出\导入。这是一张活动的桌子
请参见此处:
SAP在后端使用标准数据库引擎。您可以设置直接从SAP中提取到Access的链接表。没有导出\导入。这是一张活动的桌子 请参见此处:
您发布的代码将引发错误,这不仅是因为缺少
结束子项,而且是因为您试图修改已关闭的记录集。请显示您的实际代码。添加了其余代码,不确定这是否澄清了问题。但我希望如此您的代码仍然无法工作。您从未在objRecordSet
中打开过文件,也从未添加过新记录。愚蠢的我,编辑了那个部分,代码有点混乱,因为一些错误捕捉块。它现在在里面。对不起。您如何打开您的文件?//如果您发布的代码出现错误,不仅是因为缺少结束子项
,而且是因为您试图修改一个已关闭的记录集。请显示您的实际代码。添加了其余代码,不确定这是否澄清了问题。但我希望如此您的代码仍然无法工作。您从未在objRecordSet
中打开过文件,也从未添加过新记录。愚蠢的我,编辑了那个部分,代码有点混乱,因为一些错误捕捉块。它现在在里面。对不起。您如何打开您的文件?//真可惜!感谢您的帮助,尤其是在提出正确问题的漫长过程中。)谢谢你的帮助,特别是在提出正确问题的漫长过程中;