上传Excel工作表到AS400

我有一个Excel工作簿与多个工作表。 第一个工作表具有用户的login信息,并且有一个button可以上传与AS400中不同表格对应的所有工作表。 工作表名称与AS400表名称相同。

我有这个上传button的代码如下:

码:

Dim objConn As New ADODB.Connection, objRs As New ADODB.Recordset Dim WS_Count As Integer Dim I As Integer Dim WS_Name As String objConn.ConnectionString = "DSN=MYAS400;DRIVER=Client Access ODBC Driver (32-bit); " & _ "SYSTEM = <ip>; UID = <uname>;PWD = <pwd>" objConn.Open WS_Count = ActiveWorkbook.Worksheets.Count For I = 2 To WS_Count WS_Name = ActiveWorkbook.Worksheets(I).Name objConn.Execute "DELETE FROM MYAS400LIB. " & WS_Name & "" objConn.Execute "INSERT INTO MYAS400LIB. " & WS_Name & " SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=" & ThisWorkbook.FullName & ";HDR=YES;IMEX=1', 'SELECT * FROM [" & WS_Name & "$]')" Next I objConn.Close Set objConn = Nothing End Sub 

如何将每个工作表(带有列标题)插入AS400?

没有深入到实际编码整个事情的细节,你的代码示例的问题是,你不能发送电子表格的selectSQL到AS / 400。 AS / 400无法看到您的电子表格,因此无法在单个SQL中加载数据。 相反,您必须通读电子表格的所有行,并将这些logging逐个插入到AS / 400表中。 参数化的SQL是最好的。

这是需要执行的代码部分:

 objConn.Execute "INSERT INTO MYAS400LIB. " & WS_Name & " SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=" & ThisWorkbook.FullName & ";HDR=YES;IMEX=1', 'SELECT * FROM [" & WS_Name & "$]')" 

它不会工作。 将其replace为循环读取工作簿中的行。 您可以使用Excel OLEDB集或逐行读取电子表格。 在循环内部,对于每个电子表格行的读取,您必须编写一个INSERT INTO语句,以便通过ODBC执行到AS / 400。

我会尝试从iSeries Access使用.NET数据提供程序。 打开一个logging集。 为工作表中的每一行添加新。 更新logging集。 关。

这应该一次插入表中的所有logging,而不是一次一个。