2012-01-19 21 views
1

複数のワークシートを持つExcelブックがあります。最初のワークシートにはユーザーのログイン情報があり、AS400の異なる表に対応するすべてのワークシートをアップロードするためのボタンがあります。ワークシート名は、AS400表名と同じ名前です。Excelワークシートを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に(列ヘッダで)各ワークシートを挿入するにはどうすればよいですか?

答えて

1

コードサンプルの問題は、実際にすべてのコードを記述することなく、AS/400にスプレッドシートの選択されたSQLを送信できないという問題があります。 AS/400はスプレッドシートを見ることができないため、単一のSQLでデータを読み込むことはできません。代わりに、スプレッドシートのすべての行を読み取って、それらのレコードを一度に1つずつ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セットを使用するか、行ごとにスプレッドシートを読み取ることができます。ループ内で、読み取られたスプレッドシート行ごとに、ODBC経由でAS/400に実行されるINSERT INTOステートメントを記述する必要があります。

0

iSeries Accessから.NETデータ・プロバイダーを使用しようとします。レコードセットを開きます。シートの各行にAddNewを追加します。レコードセットを更新します。閉じる。

これは、シートからのすべてのレコードを一度に1つではなく、一気に挿入する必要があります。

関連する問題