EXCELのワークシートにマクロを登録したボタンを設置して、
mysqlのDBのレコードを更新・登録・削除する事は可能でしょうか?
SQLとかVBAの勉強も兼ねてテスト的に作ってみたいなと思っています。
上手くいけば仕事でも使えればとも思っております。
現在phpmyadminで作成したmydbがあります。
testというテーブルにid,商品名,価格,在庫というようなレコードがあります。
ODBCドライバ等の設定をして、EXCELの外部データの取り込みで、データを取り込む事は
できました。
この取り込んだデータを編集したり、新たに新しい商品を登録して、データベースを更新
できるようにしたいのですが、可能でしょうか?
VBAのサンプルコードなどあればご教示ねがいます。
因みに私のレベルはVBAもmysqlも素人なので、できれば解説などもしていただければ
尚助かります。
よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
あれま
.Update
を
.MoveNext
ではいかがでしょうか?
データの抽出は同様のコードでできましたでしょうか?
オブジェクトが開いている場合は、操作は許可されません
を そのまま理解すると ほかのユーザーがデータベースを開いている いうことになりますが。
ほかのユーザーがデータベースを開いていても抽出はできるはずです。
とりあえず
On Error GoTo Err
の行を無効にして どこで エラーになっているか確認されてはいかがでしょうか?
もし
rs.Open Sql, con, adOpenStatic, adLockOptimistic
あるいは
.Update
あたりでは?
同じ状況が確認できる環境ではありませんので、確実な回答ができません。
ありがとうございます。
.MoveNext
を試してみましたがダメでした。
On Error GoTo Err
をコメントアウトしてエラーを確認してみるとご指摘通り
rs.Open Sql, con, adOpenStatic, adLockOptimistic
の行がエラーになっていました。
試しにコメントアウトして
'rs.Open Sql, con, adOpenStatic, adLockOptimistic
にしてみると、ちょっとだけ先に進むのですが、
!ID = Cells(i, 1).Value
のところでエラーになり、
現在の Recordset は更新をサポートしていません。
プロバイダか、選択されたロックタイプの限界の可能性があります。
というメッセージになります。
ロックタイプを指定してみたらいいのかなと思い
con.Open connectionString
のところに追記で
con.Open connectionString, adOpenStatic, adLockOptimistic
という風にしてみると
access denied for user ''@'localhost' using password yes
と、パスワードが違いますよというようなメッセージになってしまいます。
お手上げでしょうか。。。?
No.4
- 回答日時:
別案ですが
SQL文でできるかもしれません。
con.Execute ("Update costomer Set 氏名='山田' Where 会員番号='1000'")
とかで実行してみてはいかがでしょうか?
For i = 2 To Cells(1, 1).CurrentRegion.Rows.Count
!会員番号 = Cells(i, 1).Value
!氏名 = Cells(i, 2).Value
!電話番号 = Cells(i, 3).Value
!住所 = Cells(i, 4).Value
.Update
Next i
の部分を
For i = 2 To Cells(1, 1).CurrentRegion.Rows.Count
NyID=Cells(i, 1).Value
MeMess= Cells(i, 2).Value
con.Execute ("Update costomer Set 氏名='" & MyMess & "' Where 会員番号='" & MyID & "'")
MyMess = Cells(i, 3).Value
con.Execute ("Update costomer Set 電話番号='" & MyMess & "' Where 会員番号='" & MyID & "'")
MyMess = Cells(i, 4).Value
con.Execute ("Update costomer Set 住所='" & MyMess & "' Where 会員番号='" & MyID & "'")
Next i
といった感じでしょうか?
重複しない会員番号があって、会員番号は変更しないという条件になりますが。
SQL文に強い人であればほかの書き方もあると思います。
ちなみにSQL Serverでは 更新できました。
ちなみに 追加は Insert 削除は Delete で可能です・
No.3
- 回答日時:
難しそうですね。
できないことはないと思いますが
MySqlについての情報って調べてみましたが私も該当するような
サイトが見つかりませんでした。
ちなみにAccessではできています。
でも仮にできたとしても追加と削除は運用であまり気にしたくても
大丈夫でしょうが、
データの内容を更新するとしたら、抽出したデータと更新する内容が
常に一致する条件が必要ですので複数のユーザーでひとつのデータベースを
活用する場合は注意が必要です。
でも
同じような方法でデータの抽出はできているのですよね。
近いところまで来ていると思います。
ちょっとほかのサイトで質問してはいかがでしょうか。
結果については、私もちょっと興味があります。
http://www.moug.net/
などではいかがでしょうか?
お力になることができずごめんなさいです。
No.1
- 回答日時:
現在のコードを提示してもらうと回答が付きやすいかと思います。
たぶん、今は
http://www.cocoaliz.com/excelVBA/index/40/
で紹介されているような Recoredsetを使って データベースの内容を
エクセルに抽出、表示できた所だと想定して回答いたします。
ちょっと検索しましたがmysplの場合の
>この取り込んだデータを編集したり、新たに新しい商品を登録して、データベースを更新
について見かけませんでしたので Accessの場合ですが
データを新しく登録する場合の例がありました。
http://www.moug.net/tech/exvba/0150040.htm
この取り込んだデータをエクセルで編集し、データベースの内容を置き換える場合は
上記のサイトの
.AddNew
!伝票番号 = Cells(i, 1).Value
!日付 = Cells(i, 2).Value
!コード = Cells(i, 3).Value
!得意先 = Cells(i, 4).Value
!金額 = Cells(i, 5).Value
.Update
の .AddNew を抜いたコードで考えてみてください。
修正の場合は、エクセルに抽出したデータが編集中にほかのユーザーで変更されないことなど
注意して使うことになります。
エクセルのシートの上には
抽出のボタンと抽出した内容を編集後に、データベースの内容を置き換えるボタンをおいて活用しています。
参考までに
http://www.moug.net/tech/exvba/0150041.htm
データを削除する場合のサンプルがあります。
ご回答いただき、ありがとうございます。
早速
http://www.moug.net/tech/exvba/0150040.htm
の分のサンプルコードを参考にして、下記のような形にしました。
Sub 追加()
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim connectionString As String
Dim sqlStr As String
'接続文字列
connectionString = "Driver={MySQL ODBC 5.1 DRIVER};" _
& " SERVER=localhost;" _
& " DATABASE=torys;" _
& " USER=root;" _
& " PASSWORD=;"
'ADODB.Connection生成
Set con = New ADODB.Connection
On Error GoTo Err
'MySQLに接続
con.Open connectionString
'SQL文
sqlStr = "select * from customer"
'SQL文実行
Set rs = con.Execute(sqlStr)
rs.Open Sql, con, adOpenStatic, adLockOptimistic
With rs 'シートの項目行(1行目)を除いてデータ行数分ループ
For i = 2 To Cells(1, 1).CurrentRegion.Rows.Count
!会員番号 = Cells(i, 1).Value
!氏名 = Cells(i, 2).Value
!電話番号 = Cells(i, 3).Value
!住所 = Cells(i, 4).Value
.Update
Next i
End With
'クローズ
con.Close
Set rs = Nothing
Set con = Nothing
Exit Sub
Err:
Set rs = Nothing
Set con = Nothing
MsgBox (Err.Description)
End Sub
すると、
「オブジェクトが開いている場合は、操作は許可されません」
というメッセージが表示されます。
どこが問題でしょうか…
どんくさい質問で申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 会計ソフト・業務用ソフト Excelで売上げデータの中の任意の商品の合計を出したい 3 2023/01/18 18:19
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
型 varchar から型 numeric へ...
-
データのインポートに失敗します。
-
ACCESSで条件付き書式の設定方法
-
エクセルのフォームについて(...
-
エクセルの重複データの曖昧検索
-
Accessで入力したデータ...
-
Web2.0のデータは次世代のイン...
-
【パフォーマンス】ファイル読...
-
AndroidからのAccessデータベー...
-
データベースの最適化をマクロ...
-
クエリをキャンセルしたいので...
-
キャッシュとバッファの違いは?
-
ODBC経由の処理が遅い
-
oo4oの読み方・・・・。
-
エクセルのマクロ
-
accessの勉強ができるサイトは?
-
Developer2000って何?(^^;
-
データベースの2GBって・・・?
-
sp_columnsでデータベース名を...
-
エクセルから、パワーポイント...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
型 varchar から型 numeric へ...
-
オラクルのLONG RAW型のテーブ...
-
エクセルのフォームについて(...
-
カンマ区切りで格納するカラム...
-
エクセルの重複データの曖昧検索
-
ハイフン無しの電話番号データ...
-
ACCESSで条件付き書式の設定方法
-
DBとテキストファイルの比較
-
OpenOfficeのBaseでExcelのデー...
-
ODBCを使わないでExcelへ連携
-
【パフォーマンス】ファイル読...
-
データのインポートに失敗します。
-
複数のPCで、同じ1つのシート...
-
データベースソフトのTCARDにつ...
-
SQL Server 縦方向のデータを列...
-
csvデータをデータベース化
-
コンピュータ用語、データベー...
-
CSVでDLしたデータにダブルクォ...
-
データ.mydファイルのテキス...
-
商品カタログ
おすすめ情報