INSERT INTOステートメント構文エラーにつ
初めましてご教授よろしくお願いします。
■環境 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
お礼
すぐに返事を頂きありがとうございました。 データを確認していましたら。やはり同じ名前の値がありました。 大変失礼をしました。 どうもありがとうございました。
補足
>一意制約エラーとは同一カラムに同一の値を入れられないということです。 そうですよね!同じ文字は入れられないということですね。 >k000というカラムにPrimaryKey属性が付与されているのだと思いますが、既に「ベルリン1234.5」というレコードがあるにも関わらず、INSERTしようとしているために発生します。 実際のデータを見てみると「ベルリン1234.5」はデータは無いのです。 サンプルで 「ベルリン12345」 「ベルリン123.45」 「ベルリン123 45」 の3つのデータをINSERTすると2つ目でエラーになります。 カンマがキーのエラーになるのかな?と言う疑問です。