Vba 正在将.csv导入MS Access&引用;AtEndOfStream“;不';我不读最后一行

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

我想通过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结尾两次点击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
中打开过文件,也从未添加过新记录。愚蠢的我,编辑了那个部分,代码有点混乱,因为一些错误捕捉块。它现在在里面。对不起。您如何打开您的文件?//真可惜!感谢您的帮助,尤其是在提出正确问题的漫长过程中。)谢谢你的帮助,特别是在提出正确问题的漫长过程中;