ExcelVBAからAccess更新のSQL

このQ&Aのポイント
  • ExcelVBAからAccessDBを更新するソースを書いています。外部データMDBを取得するマクロを記録し、SQL文をUPDATEに変更しているのですが、更新されません。
  • ExcelのVBAを使用してAccessのデータベースを更新しようとしています。外部データMDBを取得しているマクロを記録し、SQL文をUPDATEに変更しましたが、データが正しく更新されません。
  • ExcelVBAを使ってAccessデータベースを更新しようとしていますが、外部データMDBを取得しているマクロを記録し、SQL文をUPDATEに変更しても正常に更新されません。
回答を見る
  • ベストアンサー

ExcelVBAからAccess更新のSQL

お世話になります。 ExcelVBAからAccessDBを更新するソースを書いています。 外部データMDBを取得するマクロを記録し、SQL文をUPDATEに変更しているのですが、更新されません。 a = "UPDATE `C:\Documents and Settings\User\デスクトップ\sample`.住所テーブル 住所テーブル" & Chr(13) & "" & Chr(10) & "SET 住所テーブル.氏名 = 'b'" .CommandText = Array(a) このaをAccessのクエリで実行すると更新されますが、Excelからだと更新できません。 Commitしてないからでしょうか? ヘルプで検索してもCommittransメソッドと検索されるのですが、右側に内容が表示されません・・・。 ご存知の方、ご教授願います。 情報が足らないなどもお願いします。

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

  • ベストアンサー
  • jeee
  • ベストアンサー率52% (119/227)
回答No.1

素人ですが、いくつか疑問点があります。 >外部データMDBを取得するマクロを記録し Accessのマクロでしょうか。 ExcelやWordのマクロとAccessのマクロは、異なるものです。 Accessでは、モジュールになります。 Accessのマクロを実行する場合は、ApplicationでAcessを実行させ、登録されたマクロまたは指定したマクロを実行させる方法だと思いますが。(できるかどうかは知りません。) この場合、実行時にAccessが起動されますので、時間がかかります。 >a = "UPDATE `C:\Documents and Settings\User\デスクトップ\sample`.住所テーブル 住所テーブル" & Chr(13) & "" & Chr(10) & "SET 住所テーブル.氏名 = 'b'" SQL文に見えるんですが、なんとなく違うような気がします。(表名の位置にファイル名?) >.CommandText = Array(a) MS-Queryを実行しているのでしょうか。 MS-Queryで更新ができるかな。(できるかも?) MS-Queryなら、QueryのUPDATEにしないのかな。 最後に、通常、ExcelからDBを更新する場合、DOAかADOを使用してSQLを実行させると思いますが、どうでしょうか。

cat_tomato
質問者

お礼

回答ありがとうございます。 MSクエリーでは更新はできないようです。 おっしゃるとおり、DAOを使用しての更新はできました。 ありがとうございました。

関連するQ&A

  • DAOのExcelVBAにてAccessのデータを更新したい

    ExcelVBAよりAccessデータの追記は、AddNewを使用してできたのですが、単純な更新ができません。 strWhere = "Select * From 集計テーブル Where [フィールド1]='001'" Set dbWS = DBEngine.Workspaces(0) Set dbWB = dbWS.OpenDatabase("C:\対象MDB.mdb) 'データベースを呼び出す Set dbRes = dbWB.OpenRecordset(strWhere, dbOpenDynaset) 上記はそもそも更新ステートメントがありません。どのように書けばよいのでしょうか?どうかアドバイスお願いします。

  • ExcelからAccessのデータを呼び出す

    ExcelのVBAの自動記述にて以下のソースを記録しました With ActiveSheet.QueryTables.Add(Connection:= _ "ODBC;DSN=MS Access Database;DBQ=D:\アクセス練習\db1.mdb;DefaultDir=D:\アクセス練    習;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;" _ , Destination:=Range("A1")) .CommandText = Array("SELECT テーブル1.ID, テーブル1.教室名, テーブル1.コース名, テー ブル1.講師名" & Chr(13) & "" & Chr(10) & _ "FROM `D:\アクセス練習\db1`.テーブル1 テーブル1" & Chr(13) & "" & Chr(10) & _ "WHERE (テーブル1.教室名= '英語')" & Chr(13) & "" & Chr(10) & _ "ORDER BY テーブル1.ID") .Name = "MS Access Database からのクエリ_1" .Refresh BackgroundQuery:=False End With 抽出条件の部分(今回は「英語」)をインプットボックスまたは、フォームのコンボボックスなどで選択した値を変数として代入したいのですが、  KWD=Commbobox1.Text "WHERE (テーブル1.教室名= 'KWD')" KWDを変数として見てくれず、うまく走りません 変数として処理するにはどのように記述すればよいでしょう よろしくお願いいたします。

  • ExcelVBAでテーブルの更新

    ExcelVBAなんですが、 A.CSVをテーブルBの項目と上から順番に照らし合わせ、内容が違う場合にA.CSVの内容でテーブルBの項目を更新するというものを作りたいと思っています。 DB接続し、if文で同じ内容かどうかを分ける事はできたのですが、その後がどうしてもわかりません>< 色々なサイトを見ていると、Rs.Editというものが使われているのですが、何故か使えないのです。 メソッドまたはデータメンバが見つかりませんというエラーが出ます。 これは何が原因なのでしょうか??

  • accessでレコード更新直後の反映について

    アクセスのレコードの更新直後、他PCから該当レコードを読むと更新が反映されていません。回避方法をお教え下さい。 尚、アクセスの初心者です。 ”データ.mdb”をServerへ置き、複数のPCの”プログラム.mdb”から”データ.mdb”のテーブルをリンクし使用する予定です。 しかし、PC-Aの”プログラム.mdb”でテーブルを更新した直後PC-Bの”プログラム.mdb”からテーブルを読み込むと更新が反映されていません。 しかし、更新後 約2秒以上経過した後に読み込むと更新が反映されています。 試行錯誤しましたが改善しません。 以下に環境を示します。 Access2003で”データ.mdb”と”プログラム.mdb”を作成しAccess2010とAccess2003で使用 T_確認テーブルに”Yes/No型”で”アクセス中フラグ”を設定 ServerとPC-AとPC-BはLANで接続 <プログラム内容の抜粋> Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("T_確認テーブル", dbOpenDynaset, dbDenyRead) rs.MoveFirst If rs!アクセス中フラグ = True Then ' → または”if rs!アクセス中フラグ Then”でも同じ MsgBox "既に他者が使用", vbExclamation, "入力依頼" else rs.movefirst rs.edit   rs!アクセス中フラグ=True ' フラグをセット rs.update End If db.Close Set db = Nothing

  • [AC2000]SQLで追加若しくは更新する考え方

    会社で店舗毎での勤怠管理のソフトの作成を指示されたのですが、 各店舗はVPN(GA)でネットワーク化されており、本社にファイルサーバーがあります。 しかし、会社のデータベースソフトはAccess2000しか無いので、本社のサーバーにデータ用のMDBを置き、各店舗には入力用のMDBを置き、本社では管理用のMDBを置こうと思います。 本題なのですが、リンクテーブルを使用すると当然重く、同時に各店舗から入力するのが困難なので、SQL(INSERT INTOとUPDATE)で制御しようとしたのですが、データがあったら更新、無ければ追加する、の様な条件制御をSQLで出来るのでしょうか? ADOでやれば出来るのですが、スキルアップの為悩んでいます。 考え方をご教授頂ければ、後は作成中のMDBに応用させて見たいと思いますので、宜しくお願いします。

  • Access起動中にエクセルからADOでデータの更新ができない

    こんばんは。原因がわからないので質問させてください。 SQLサーバーのデータをAccessのmdbへリンクテーブルしています。 (SQLサーバー → Access) 全て一つのパソコンで行なっています。(LANには接続していません) Accessのmdbファイルを起動している時に ExcelからSQLサーバーのAccessにリンクしている上記のテーブルへ ADOを使ってデータを追加しています。 (Excel → Access)  しかし、「rs.Update」の部分で  「ODBC--リンク テーブル'テーブル1'での更新に失敗しました。」 となってしまいます。 なので、一度mdbファイルを落として、コードを再開すると通るので ADOでExcel → Accessにデータを追加し終わってから再度mdbファイルを立ち上げています。 また同じ状態(mdbファイルを起動)で Excel → SQLサーバー へ更新クエリをしようとすると「時間切れになりました」となります。 (こちらもmdbファイルを落とすと再開できます。) いちいちmdbファイルを落とすのめんどうなのですが 回避する方法はありますか? cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\Users\Documents.test.mdb" rs.Open "テーブル", cn, adOpenStatic, adLockPessimistic rs("フィールド") = True rs.Update '保存 rs.Close: Set rs = Nothing というコードを書いています。 Accessを落とせば正常に動きます。 ご教授よろしくお願い致します。

  • こんなSQLを教えてください

    こんなSQLを教えてください <更新前> テーブル1 |キー|コード| | 1|  a| | 2|  b| | 3|  c| テーブル2 |キー|コード| | 2|  B| | 4|  D| <更新後> テーブル1 |キー|コード| | 1|  a| | 2|  B| | 3|  c| こんなふうに テーブル1と同じデータがテーブル2にあったら テーブル1を書き換えるUPDATE文を教えてください

  • accessのチェックボックスをSQLで更新

    sqlでaccessテーブルのyes/noをWEBに表示してそこからチェックを外したり付けたりしてUPDATEでテーブル更新をしています。 しかし表示はできるのですが、更新がうまくできません。 下に示すように 表示は”会合”にチェックが入っていたら $a6 = 1or0 の部分で処理するようにしていますが、 UPDATEの部分がうまく動作することができません… どのようにすればいいのでしょうか? 説明下手ですが宜しくお願いします。 ################ <form action="nana.php" method="POST"> <? …略… $sensyu = $_POST["sensyu"]; if ($sensyu == true){ $result = odbc_exec($conn_id ,"UPDATE メイン set 選終 = 1 WHERE 村名 = '宮城村'");} if ($sensyu == false){ $result = odbc_exec($conn_id ,"UPDATE メイン set 選終 = 0 WHERE 村名 = '宮城村'");} …略…(DB接続) $a6 = odbc_result($result, "会合"); …略…(HTML作成) if ($a6 == 1){ print("<TD><input type=checkbox checked name=sensyu size=10 value=1></TR><BR>");} if ($a6 == 0){ print("<TD><input type=checkbox name=sensyu size=10 value=0></TR><BR>");} …略… <input type="submit" value="得票更新">

  • SQL文でフィールド名を変動的にできますか?

    VB.NETにてアクセスのMDBへSQLを使って直に書き込むコーディングについて疑問があります。 例えば、 cmnd.CommandText = "UPDATE 野菜テーブル SET 野菜カゴ1 = '" & 野菜名 & _ '" WHERE 条件文・・・" このように野菜テーブルのフィールド「野菜カゴ1」へある野菜をアップデートするSQLコマンド文があるとします。 しかし、アップデートする際、野菜カゴも都度変動する場合(例えばカゴが1~5ある等)はどのようなSQL文となるのでしょうか?フィールド名に変数を使用できるのでしょうか?方法をお知りの方がいましたらご教授願います。

  • ExcelVBAからAccessのモジュールを実行したい

    ExcelVBAからAccessのモジュールを実行したいのですが、 終了した後、タスクマネージャにExcelが残ってしまいます。 ExcelVBAは下記の通りです。 Dim objAccess As Object Dim strAccessPath As String strAccessPath = ThisWorkbook.Path & "\a.mdb" Set objAccess = CreateObject("Access.Application") objAccess.Opencurrentdatabase objAccessPath objAccess.Run "モジュール1" objAccess.closecurrentdatabase objAccess.Quit Set objAccess = Nothing です。 モジュールの内容は、  1.ExcelのシートをAccessにインポート  2.選択クエリでテーブルとの差分を抽出しグループ化  3.クエリをエクスポートする です。 objAccess.Run "モジュール1" をしなければExcelが残らないようなので Run以外の方法でモジュールを実行する方法をご教授ください。 (つたない説明でわかりにくい点あると思います。ご指摘ください)

専門家に質問してみよう