Загрузить листы Excel в AS400 - PullRequest
1 голос
/ 19 января 2012

У меня есть книга 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 ]

1 голос
/ 24 января 2012

Не вдаваясь в детали фактического кодирования, проблема с примером кода заключается в том, что вы не можете отправить выбранный 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 & "$]')"

Это не сработает. Замените его циклом чтения строк в рабочей книге. Вы можете использовать набор OLEDB в Excel или читать электронную таблицу построчно. Внутри цикла для каждой прочитанной строки таблицы вам нужно будет написать инструкцию INSERT INTO, которая будет выполняться через ODBC, в AS / 400.

0 голосов
/ 10 августа 2012

Я бы попробовал использовать поставщик данных .NET из iSeries Access.Откройте набор записей.AddNew для каждой строки на вашем листе.Обновите набор записей.Закрыть.

При этом все записи с листа должны вставляться одним ударом, а не по одному за раз.

...