将Excel工作表上载到AS400

时间:2012-01-19 09:41:41

标签: excel vba excel-vba ibm-midrange

我有一个包含多个工作表的Excel工作簿。第一个工作表具有用户的登录信息,并且有一个按钮用于上载AS400中与不同表对应的所有工作表。工作表名称与AS400表名称相同。

我有上传按钮的代码,如下所示:

代码:

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?

2 个答案:

答案 0 :(得分:1)

在没有深入了解实际编码整个事情的细节的情况下,您的代码示例的问题在于您无法将电子表格的选择SQL发送到AS / 400。 AS / 400无法查看您的电子表格,因此无法在单个SQL中加载数据。相反,您必须仔细阅读电子表格的所有行,并将这些记录一次一个地插入到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 & "$]')"

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

答案 1 :(得分:0)

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

这应该一次性插入工作表中的所有记录,而不是一次插入一个。