質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

6642閲覧

VBA MySQL テーブルにレコードを追加したい

saiki326516

総合スコア8

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2018/08/14 02:11

編集2018/08/15 06:08

今VBAとMySQLの勉強しています。わからないのが以下のことなので質問させていただきたいです。

Excelの指定したセルに入ってる値をMySQLデータベースのテーブルに新しいレコードとして
追加する場合どのようなコードにしたらいいですか?

イメージとしては以下コードのようなイメージなんですが、これで正しい場合は
値を取得するセルをB2とした場合、SQL文のValue以降のコードはセルをどう指定すればいいですか?
value以降にセルを指定した場合エラーになりましたが、直接値を入れた場合はデータベースにレコードが追加されていました。
なので考え方はあってるのかなとか勝手に思ってますが…

もしSQL文自体や考え方が違っていた場合どういったコードにするのが正しいですか?
いろいろ試してるのですがうまくいかないので教えていただけると助かります。よろしくお願いいたします。

VBA

1コード 2Dim con As Object 3Dim SQL1 As String 4 5Set con = CreateObject("ADODB.Connection") 6con.connectionString = "DRIVER={MySQL ODBC 8.0 Unicode Driver};" & _ 7 " SERVER=localhost;" & _ 8 " DATABASE=practice;" & _ 9 " UID=root;" & _ 10 " PWD=sample;" 11con.Open 12 13Dim SQL1 As String 14SQL1 = "Insert into syouhin_table(商品名,新商品フラグ,見積フラグ)Value()" 15con.Execute SQL1

以下試してみたコードです。セルを指定してマクロを実行すると
-2147217900(80040e14)オートメーションエラーです"となります。

vba

1'value以降に直接値を入れた場合。 2SQL1 = "insert into syouhin_table(商品名,新商品フラグ,見積フラグ)value('お菓子',0,1)" 3 4'value以降にセルを指定した場合 5SQL1 = "insert into syouhin_table(商品名,新商品フラグ,見積フラグ)value(" & Cells(2, 2).Value & ",0,1)" 6SQL1 = "insert into syouhin_table(商品名,新商品フラグ,見積フラグ)value(Cells(2, 2).Value,0,1)"

以下レコードを追加したいテーブル
mysql>show fields from syouhin_table;
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| 商品ID | int(10) | NO | PRI | NULL | auto_increment |
| 商品名 | varchar(50) | NO | UNI | NULL |    |
| 新商品フラグ | tinyint(1) | NO |   | NULL | |
| 派生ID | int(10) | YES |   | NULL | |
| 見積フラグ | tinyint(1) | NO |   | NULL | |
| 発売開始日 | date | YES |   | NULL | |
| 販売終了日 | date | YES |   | NULL | |
+--------------+-------------+------+-----+---------+----------------+

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ladybird

2018/08/14 09:22

「value以降にセルを指定した場合」のコードとエラー内容をご記載ください。
saiki326516

2018/08/15 06:12

ladybirdさんエラー内容など追記しました。お手数おかけして申し訳ありません。コードはネットで調べてこれで指定できないかな?といったコードを使用してるのでそもそも自分の要求に合ってないのかもしれないです。
guest

回答1

0

ベストアンサー

追記対応ありがとうございます。

私の環境では、下記のようにシングルクオートでセルの値を囲むことで登録できました。
(デバッグで各パターンでのSQL1の値をそれぞれ見比べると納得できるかと思います。)

VBA

1SQL1 = "insert into syouhin_table(商品名,新商品フラグ,見積フラグ)value('" & Cells(2, 2).Value & "',0,1)"

これでもなおエラーになるようでしたら、下記を参考に対応してみると直るかもしれません。
ExcelVBA やっかいな「オートメーションエラー」

投稿2018/08/15 07:20

ladybird

総合スコア163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saiki326516

2018/08/16 05:45

いただいたコードを試してみたらできました。 シングルクォーテーションで囲んで指定して文字列としないといけなかったんですね。 デバックで値を比較して納得しました。 ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問