【问题标题】:Upload Excel worksheets to AS400将 Excel 工作表上传到 AS400
【发布时间】:2012-01-19 09:41:40
【问题描述】:

我有一个包含多个工作表的 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?

【问题讨论】:

    标签: vba excel ibm-midrange


    【解决方案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。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-04-16
        • 2019-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-21
        相关资源
        最近更新 更多