Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将Excel工作表上载到AS400_Vba_Excel_Ibm Midrange - Fatal编程技术网

Vba 将Excel工作表上载到AS400

Vba 将Excel工作表上载到AS400,vba,excel,ibm-midrange,Vba,Excel,Ibm Midrange,我有一个包含多个工作表的Excel工作簿。第一个工作表包含用户的登录信息,并且有一个按钮用于上传AS400中不同表对应的所有工作表。工作表名称与AS400表名称相同 我的上传按钮代码如下: 代码: Dim objConn作为新的ADODB.Connection,objRs作为新的ADODB.Recordset Dim WS_计数为整数 作为整数的Dim I 将WS_名称设置为字符串 objConn.ConnectionString=“DSN=MYAS400;DRIVER=客户端访问ODBC驱动程

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

我的上传按钮代码如下:

代码:

Dim objConn作为新的ADODB.Connection,objRs作为新的ADODB.Recordset
Dim WS_计数为整数
作为整数的Dim I
将WS_名称设置为字符串
objConn.ConnectionString=“DSN=MYAS400;DRIVER=客户端访问ODBC驱动程序(32位);”&_
“系统=;UID=;PWD=”
对象打开
WS\u Count=ActiveWorkbook.Worksheets.Count
对于I=2到w_计数
WS_Name=ActiveWorkbook.Worksheets(I).Name
objConn.Execute“DELETE FROM MYAS400LIB.”&WS\u Name&“
objConn.Execute“INSERT INTO MYAS400LIB.”&WS_Name&“SELECT*FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=“&thishworkbook.FullName&“HDR=YES;IMEX=1”,“SELECT*FROM[”&WS_Name&“$”)”
接下来我
结束
Set objConn=Nothing
端接头

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

如果不深入实际编码的细节,代码示例的问题是无法将电子表格的select 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。

如果不深入实际编码的细节,代码示例的问题是您无法将电子表格的select 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语句写入AS/400,以通过ODBC执行。

我将尝试使用iSeries Access中的.NET数据提供程序。打开一个记录集。为工作表中的每一行添加新内容。更新记录集。接近


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

我将尝试使用iSeries Access中的.NET数据提供程序。打开一个记录集。为工作表中的每一行添加新内容。更新记录集。接近

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