4

こんにちは、を使用して、Excel シートの値を同じデータベースの新しいテーブルにコピーしようとしていますSelect * INTO query

Excelに抽出されたデータは他のテーブルからのもので、Excelでいくつかの列を編集した後、新しいテーブルを作成してExcelシートをSQLデータベースに送り返す必要があります。

エラーと言うコードに問題がありました:

Run- time error '-2147217900 ' Automation Error

VBA マクロを使用して、テーブルの値をExcel から SQLにインポートおよびエクスポートしています。

これが私のコードです

Dim adoCN As ADODB.Connection
Dim sConnString As String
Dim sSQL As String
Dim lRow As Long, lCol As Long

sConnString = "Provider=sqloledb;Server=;Database=mycon;User Id=;Password="

Set adoCN = CreateObject("ADODB.Connection")

adoCN.Open sConnString

'Assumes that you have Field1, Field2 and Field3 in columns A, B and C
'For this example we can assume that the data exists on Sheet1, with a header on row
'1 and data in rows 2-11
'Also assume that the fields are defined as character (e.g. varchar or char)
'Text values must be enclosed in apostrophes whereas numeric values should not.

'adoCN.Open

For lRow = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

sSQL = "SELECT * INTO TestTable FROM Sheets(1)$"

***adoCN.Execute sSQL***

Next lRow

adoCN.Close

Set adoCN = Nothing


'On Error GoTo 0

行のエラー: adoCN.Execute sSQL

私を助けてください。

4

3 に答える 3

0

そのコードにはいくつかの問題があります。

まず、SQL ステートメントでシートの名前だけを渡すことはできません。SQL Server は、シートの存在すら認識していません (さらに言えば、Excel もまったく認識していません)。それらは完全に別個のインスタンスです。

第二に、誰かがすでに指摘したように、"SELECT * INTO ..."ステートメントを実行するたびに、実際には行が 1 つしかない新しいテーブルを作成しています。

あなたはこのようなことをすべきです。私は(あなたのコメントであなたが言ったように)TestTableデータベースにすでに存在し、あなたのシートが本当にSheets(1). また、どの列にどのフォーマットがあるかを伝えていないので、それらはすべて文字列であると想定し、ステートメント内の値を引用符で囲みました。

Dim adoCN As ADODB.Connection
Dim sConnString As String
Dim sSQL As String
Dim lRow As Long, lCol As Long

sConnString = "Provider=sqloledb;Server=;Database=mycon;User Id=;Password="

Set adoCN = CreateObject("ADODB.Connection")

adoCN.Open sConnString

With Sheets(1)

For lRow = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

  sSQL = "INSERT INTO TestTable VALUES ('" & .Cells(lRow, 1) & "', '" & .Cells(lRow, 2) & "', '" & .Cells(lRow, 3) & "')"

  adoCN.Execute sSQL

Next lRow

End With

adoCN.Close

Set adoCN = Nothing
于 2013-09-12T13:04:51.617 に答える