• ベストアンサー

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) 上記はそもそも更新ステートメントがありません。どのように書けばよいのでしょうか?どうかアドバイスお願いします。

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

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

>Editメソッドとは、何でしょうか? Editメソッドはレコードを編集可能な状態にするメソッドです。 >単に「dbRes.Edit」を書けばよいのでしょうか? '以降は説明として見てください。と言う事で dbRes.Edit で良いです。 >更新させる処理とは、SQL文を書くのでしょうか ここはフィールドをセットします。 補足から参照すればフィールド2='aaa'であれば dbRes.Edit dbRes!フィールド2 = "aaa" dbRes.Update となります。 strWhereでセットしたSQLで複数のレコードが抽出される場合はEOFプロパティを使って先頭レコードから最後のレコードを対象としてLoopさせます。 Do Until rs.EOF dbRes.Edit dbRes!フィールド2 = "aaa" dbRes.Update dbRes.MoveNext Loop

pyontanrie
質問者

お礼

大変ありがとうございます。なんとかできそうです。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

DAO Edit UpdateでWEB照会してみてください。 沢山例も出てきます。(16万?) http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdnofftalk/htm/office01132000.asp 「DAO では Edit メソッドを使って Recordset オブジェクトを編集可能に する必要があったのに対し、ADO では編集モードを明示的に指定する必要がないことです。」

pyontanrie
質問者

お礼

ありがとうございます。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

最近はADOを使ってるのでDAOは書かなくなりましたが・・ 下記ではどうでしょうか。 Dim dbWS As DAO.Workspace Dim dbWB As DAO.Database Dim dbRes As DAO.Recordset Dim strWhere As String strWhere = "Select * From 集計テーブル Where [フィールド1]='001'" Set dbWB = dbWB.OpenDatabase("C:\対象MDB.mdb) Set dbRes = dbWB.OpenRecordset(strWhere, dbOpenDynaset) dbRes.Edit 'Editメソッドを記述し編集可能な状態に設定 '更新させる処理 dbRes.Update 'Updateメソッドを記述して編集内容を更新 dbRes.Close: Set dbRes = Nothing '後処理 dbWB.Close: Set dbWB = Nothing 記述間違ってたらゴメンなさい。

pyontanrie
質問者

補足

早速の回答ありがとうございます。 Editメソッドとは、何でしょうか? 単に「dbRes.Edit」を書けばよいのでしょうか? また、更新させる処理とは、SQL文を書くのでしょうか? 具体的には、「UPDATE 集計テーブル SET フィールド2='aaa'」など?

関連するQ&A

  • DAOでODBC経由のRDBに接続し、SQLでアクセスしたい。

    Dim ws As DAO.Workspace, db As DAO.Database Dim rs As DAO.Recordset ' デフォルトのワークスペースを定義する Set ws = DBEngine.Workspaces(0) ' ODBC接続文字列を指定してデータベースを開く Set db = ws.OpenDatabase("", False, False, _ "DSN=SQL_K;ODBC;Driver={SQK_K};" & _ "SERVER=(local);DATABASE=pubs;" & _ "UID=*****;PWD=*****;" ' SQLステートメントを指定してレコードセットを作成する Set rs = db.OpenRecordset("select * from TWSQLK1",dbOpenDynaset, dbSeeChanges)   このレコードセットは正常に行きますが   直接SQLを記述する方法が、わかりません   

  • MDBのアクセス権

    VB6で、MDBファイルを操作しています。 Set myws = DBEngine.Workspaces(0) Set mydb = myws.OpenDataBase("xxx.MDB")で MDBを開いています。 インストールがadministratorで行うとなんら問題が無いのですが、それ以外のユーザーの権限でアクセスするとエラーになります。EXEは実行しているようです。 1:そのユーザーのMyDocumentにインストール 2:ProguramFilesにそのユーザーの権限を与える。 3:他のユーザーで実行 のいずれも動作しますが、先方の要求はあくまでもインストーラでなんら操作せずとも実行できるとの事です。もしくはバッチファイルを組む。 というものです。 インストーラは、VisualStudioInstallerを用いてます。 MDBファイルさえアクセスできれば良いのですが、adminiのパスワードなども全てのマシンで異なります。 良いアイデアがあれば、教えてください。よろしくお願いいたします。

  • DAOでのOpenRecordsetの方法

    SQLServerのDBをDAOを使って更新しようとしていますが、方法がわからず困っています。 ------------------- private Cn as DAO.Database private function fnc1() as integer Dim ws As DAO.Workspace Dim rcdst1 As DAO.Recordset dim strCnct As String dim strSQL As String strCnct = "ODBC;Driver={SQL Server};SERVER=" & g_strSVName & ";DATABASE=" & g_strDBName & ";UID=" & strpUserID & ";PWD=" & strpPassword & ";" 'DB接続 Set Cn = ws.OpenDatabase("", False, False, strCnct) strSQL = "SELECT * FROM Table1" Set rcdst1 = Cn.OpenRecordset(strSQL, dbOpenDynaset, dbDenyWrite, dbOptimistic) ------------------------------------- このOpenRecordsetで ODBC--すべてのレコードをロックできません。(3254) のエラーが出ます。 また、OpenRecordsetを Set rcdst1 = Cn.OpenRecordset(strSQL, dbOpenDynaset) とすると rcdst1.Edit で データベースまたはオブジェクトは読み取り専用なので、更新できません。 のエラーが出ます。 どうしたらいいでしょうか。

  • Accessのリンクテーブル

    すみません、教えてください。 Accessで複数端末から一つのMDBにデータ登録をさせる為に、VBAでツールを作っています。以下のように記述をして いるのですが、MDBを閉じるたびに、リンク先のDBを認識しなくなってしまいます。テーブルでリンクを貼りなおすとまた動くようになるのですが、どうしたらリンクを貼りなおせずにできるようになるのか、どなたか教えてください。どうかお願いいたします。 Dim LinkDB as Database Dim RST AS Recordset Set LinkDB = WorkSpaces(0).OpenDatabase("リンク先のDBの名前") Set RST = LinkDB.OpenRecordset("テーブル名",DbOpenTable)

  • vb6でmdbのOpenDatabase時にエラー

    お世話になります。 PC98の環境でVB6でオフィスの入っていない環境です。 Set db1 = DBEngine.Workspaces(0).OpenDatabase(App.Path & "aaa.mdb",dbDriverComplete) を実行すると ”このプログラムは不正な処理を行ったので強制終了します。” となってしまいます。 昨日までは、エラーなく動いていたのですが原因がわかりません。 ご教授宜しくお願いします。

  • レコードの検索について

    vbの初心者です。質問です。 ある特定の条件を2つ満たしたレコードを検索して、 そのレコードをカレントレコードとしたいのですが... 条件が一つであれば、FindFirstを使って、 *-------------- 変数宣言は省略 *-------------- Set db = DBEngine.Workspaces(0).OpenDatabase("データベース名") Set rsDAO = db.OpenRecordset("テーブル名", dbOpenDynaset) kensaku = "irai_no = '100'" rsDAO.FindFirst kensaku などとすれば、テーブルのirai_noフィールドが "100"の最初のレコードがカレントレコード となるというのはわかっているのですが... それでは、もう一つ条件として"gyosya_nm='ABCD'"も満たす、つまり 2つの条件を満たすレコードを検索するにはどうすれば良いですか? できれば、一つの命令でお願いしたいです。 宜しくお願い致します。

  • Excel VBA DAO について

    いつもお世話になっております。 現在Excel2007でマクロを組みました。 下記ソースのような形で、マクロを実行するブック内にあるシートから、データを取得するのですが・・・・ ~ソース例~ dim dbEngine as object Dim db as object Dim rs as object Dim sql as object '■SQL格納 sql = sql & "Select 社員名 " sql = sql & " ,Sum(月収) as 年収 " sql = sql & " From 月収一覧 " sql = sql & "Group By 社員名,月収; " '■DBを開く Set dbEngine = CreateObject("DAO.DBEngine36") Set db = dbEngine.OpenDatabase("C:\社員月収.xls", False, False, "Excel8.0;") '■SQL実行後レコードセットへ格納 Set rs = db.Openrecordset(sql) としていますが「■DBを開く」の部分でCreateObject内で宣言している”DAO.DBEngine36”の部分をそのPCのDAOライブラリのバージョンによって変更したいのですが、可能なのでしょうか?? 以上です><よろしくお願いいたします!!

  • DAOでACCESSをREADしてEXCELに表示

    お世話になります。 初心者ですが、DAOを使ってACCESSのテーブル(名称”テーブル1”)を全READして全データをEXCELに表示するところまでは出来ました。 (やりたいこと1) 今度は下記の様に"ボタン1"をクリックされたら、Accessに下記の様なデータ(今は"taro"という固定でデータですが将来的には可変的する予定です)を追加したいのですが、既にAccess側に社員番号と氏名が同じレコードがあった場合には追加させないロジックを追加したいのです (やりたいこと2) "ボタン1"をクリックした時に、追加される"taro"のデータはAccessの"テーブル1"の一番下に追加されるようにしたいです。現在は中途半端にテーブル1の真ん中あたりに追加されます。 上記2点につきまして、どなたかご教授いただけませんでしょうか? よろしくお願い致します。 環境 Windows XP SP3 Excel2003 Sub ボタン1_Click() Dim rst As DAO.Recordset Dim fld As DAO.Field Dim sht As Worksheet Dim rcnt As Long, ccnt As Long '行カウンタ、列カウンタ ' On Error GoTo Err_DAOSample If DBE Is Nothing Then Set DBE = New DAO.DBEngine End If If DB Is Nothing Then Set DB = DBE.OpenDatabase("C:\TEST.mdb") End If Set rst = DB.OpenRecordset("SELECT * FROM テーブル1", dbOpenDynaset) Set sht = ActiveSheet ' レコード追加 With rst .AddNew .Fields("社員番号") = "00000010" .Fields("氏名") = "taro" .Fields("所属") = "管理部" .Fields("年齢") = 19 .Update End With End Sub

  • 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メソッドと検索されるのですが、右側に内容が表示されません・・・。 ご存知の方、ご教授願います。 情報が足らないなどもお願いします。

  • ExcelVBAにて外部データ(*.csv)をSQL文を使って抽出する方法

    こんにちは VBAインポート問題で日々悩んでいるものです。 CSV形式のデータをODBCのシステムDSNに登録し、それをDAOでSQL要求しデータを抽出する方法がよくわかりません。 (1)データベースの定義記述内容 (2)レコードセットにSQL命令をかける記述 (3)抽出された内容をワークシートに貼る記述 等がよくわかりません。 DAOの場合、レコードセットを定義するのに set DB=DBEngine.OpenDatabase("******")があったり、なかったりする理由がわかりません。 突然、set rs = CurrentDb.OpenRecordset("*****") しているのはなぜでしょうか。

専門家に質問してみよう