• ベストアンサー
  • 困ってます

INSERT INTOステートメント構文エラーにつ

  • 質問No.9712437
  • 閲覧数66
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 100% (1/1)

初めましてご教授よろしくお願いします。

■環境 office365(ExcelとAccess)


INSERT INTOステートメント構文エラーについての質問です。

著:今村ゆうこさんの『Excel&Access連携 実践ガイド』を読みながら現在作業を

しています。

やりたいことはExcelのデータをaccessに書き込むことです。

エラー内容は「INSERT INTO ステートメントの構文エラーです。」と表示されます。
しかし、何度も見直して見ましたが、どこがエラーの原因かわかりません。

VBAは基本的部分が分かる程度で、現在勉強中です。
正直手詰まりといった感じで何を修正すれば良いかわからないというのが現状でこちらに質問させていただきました。

皆様の知恵を貸してください。どうかよろしくお願い致します。


▼Excelデータ
Product Name / Merchant SKU / ASIN / Condition / qty
○○(商品名) / テキスト / テキスト / テキスト / 個数

strSQL = _
"INSERT INTO テーブル(" & _
"Product Name, " & _
"Merchant SKU, " & _
"ASIN, " & _
"Condition, " & _
"qty) " & _
"VALUES(" & _
"'" & Cells(n, 1) & "', " & _
"'" & Cells(n, 2) & "', " & _
"'" & Cells(n, 3) & "', " & _
"'" & Cells(n, 4) & "', " & _
Cells(n, 5) & ");"


▼書籍に記載のあった例(添付CDのデータを丸々コピペしています)
strSQL = _
"INSERT INTO 販売管理(" & _
"商品コード, " & _
"商品名, " & _
"売上日, " & _
"数量, " & _
"売価, " & _
"製造場所, " & _
"定価, " & _
"原価, " & _
"取引先, " & _
"営業所, " & _
"社員名) " & _
"VALUES(" & _
"'" & Cells(n, 1) & "', " & _
"'" & Cells(n, 2) & "', " & _
"#" & CDate(Cells(n, 3)) & "#, " & _
Cells(n, 4) & ", " & _
Cells(n, 5) & ", " & _
"'" & Cells(n, 6) & "', " & _
Cells(n, 7) & ", " & _
Cells(n, 8) & ", " & _
"'" & Cells(n, 9) & "', " & _
"'" & Cells(n, 10) & "', " & _
"'" & Cells(n, 11) & "');"


▼全体の文

Option Explicit '変数の宣言を強制する

'---ACCESS接続用
Private adoCn As Object 'ADOコネクションオブジェクト
Private adoRs As Object 'ADOレコードセットオブジェクト
Private strSQL As String 'SQL文

Sub DBconnect(flg As Boolean) 'DB接続プロシージャ
Dim DBpath As String

DBpath = ThisWorkbook.Path

Set adoCn = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクトを作成
If flg = True Then Set adoRs = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成
adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & DBpath & "\SampleData.accdb;" 'Accessファイルを開く
End Sub

Sub DBcut_off(flg As Boolean) 'DB切断プロシージャ
If flg = True Then adoRs.Close 'レコードセットのクローズ
adoCn.Close 'コネクションのクローズ
Set adoRs = Nothing 'オブジェクトの破棄
Set adoCn = Nothing
End Sub

Sub DBinsert_all() 'DB一括書込
Dim start_i As Long, end_i As Long, n As Long

If MsgBox("一括書込を実行しようとしています。続けますか?", vbOKCancel) <> 1 Then 'メッセージ
Exit Sub 'OK以外なら終了
End If

If MsgBox( _
"Accessの「販売管理」テーブルのデータを一度削除し、" & vbCrLf & _
"現在このシートにある情報のみが書き込まれます。" & vbCrLf & _
vbCrLf & _
"実行してよろしいですか?", vbOKCancel + vbExclamation, "一括書込み") <> 1 Then 'メッセージ
Exit Sub 'OK以外なら終了
End If

start_i = 2 'スタート行
end_i = Range("A1").End(xlDown).Row '最終行を取得

Call DBconnect(False) 'DB接続

On Error GoTo Err_Handler 'エラーが起きたら"Err_Handler"へ
adoCn.BeginTrans 'トランザクション開始
strSQL = "DELETE FROM 販売管理;" 'テーブル内データを全削除
adoCn.Execute strSQL '削除実行

For n = start_i To end_i 'データのある行を繰り返す
strSQL = _


adoCn.Execute strSQL '書込実行
Next n

adoCn.CommitTrans 'トランザクション終了(確定処理)
Call DBcut_off(False) 'DB切断

MsgBox "正常に完了しました"
Exit Sub

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 58% (121/208)

> "Product Name, " & _
> "Merchant SKU, " & _

ここ↑ですが、フィールド名に空白があるなら、

"[Product Name], " & _
"[Merchant SKU], " & _

という具合にしないとダメかと。
お礼コメント
sakusakuraaa

お礼率 100% (1/1)

ありがとうございます!!ここ最近ずっとこれで悩んでいましたが解決できました!!
投稿日時:2020/02/13 16:39
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ