テーブルの更新方法とは?

このQ&Aのポイント
  • テーブルAとテーブルBのデータを更新する方法について教えてください。
  • テーブルAにテーブルBのデータを更新する方法がわかりません。どのようにしたら良いでしょうか?
  • テーブルAとテーブルBを更新する方法について教えてください。
回答を見る
  • ベストアンサー

テーブルの更新したい。

教えてください。 A と Bというテーブルがあり、BのデータをAに更新後、Bのフィールド[最終YMD]に日付をいれたい。 NOW()を使用したい。 下記のようにモジュールを分からないなりに作成したのですが テーブルAは、更新されるのですが 次をどのようにしたら良いかわかりません。 宜しくお願いいたします。 Function DONEW_INP(FORMNAME) 'Dim Q As QueryDef, MyDB As Database, F As Form Dim T1 As Recordset, T2 As Recordset Set MyDB = CurrentDb Set F = Forms(FORMNAME) ' Set Q = MyDB.QueryDefs("INP_MST検索") Q(0) = F("No") Q(1) = F("倉庫No") Q(2) = F("ID") Set T1 = Q.OpenRecordset() Q.Close T1.Edit                         ’テーブルAにテーブルBを更新。 T1("0") = Val_0(T1("0")) + Val_0(F("01")) T1("1") = Val_0(T1("1")) + Val_0(F("11")) T1("2") = Val_0(T1("2")) + Val_0(F("21")) T1.Update T1.Close Set Q = MyDB.QueryDefs("INP_台帳検索") Q(0) = F("No") Q(1) = F("区分") Q(2) = F("種類") Q(3) = F("倉庫No") Set T2 = Q.OpenRecordset() Q.Close 'T2.Edit                  ’Bのテーブルの更新。 'T2("最終YMD") = Now()  'T2.Update 'T2.Close  End Function

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

別に慌てなくていいです。 ・「1.更新は、Aで、Bの内容です。」 これ変でしょう?普通なら「Bの内容でAを更新する」とか「Aの内容でBを更新する」になるはずです。 だから、更新対象のテーブルは一つなのかそれとも二つなのかそれも分かりません。 どうも「てにをは」が混乱しているように思います。 仮に「Aの内容でBを更新する」 なら、Aだけからなるクエリでレコードセットを作って、そこからBをだけからなるレコードセットを更新するのではなく、BをAで更新する更新クエリを作り、実行すべきだと思います。 可能ならテーブルA,B、クエリ「INP_MST検索」、「INP_台帳検索」の内容を提示してください。

agu006
質問者

お礼

ご指摘があったのでクエリを確認したところ、 クエリ「INP_台帳検索」が特定のレコードを 実行できないのが原因でした。 見て頂き、ありがとうございました。

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

どうも、日本語になっていないように感じるのは私だけでしょうか。 ・「A と Bというテーブルがあり、BのデータをAに更新後」 更新するのはA?それともB? ・「Bのフィールド[最終YMD]に日付をいれたい。 NOW()を使用したい。」 Bを更新して、その際フィールドをNOW()関数で更新したい? ・VBAのソースですが、ざっと見てループがありませんが更新対象のレコードは1件だけ? ・テーブルAを使っているのはどっちのクエリ?

agu006
質問者

補足

説明が変で申し訳ないです。 1.更新は、Aで、Bの内容です。 2.Aに更新した際に更新チェックとして、Bの[最終YMD]に日付をいれたい為です。 3.Aを使っているのは、最初のINP_MST検索です。 

関連するQ&A

  • DAOでテーブルの内容を検索したいのですが…

    DAOでテーブルの内容を検索したいのですが… アクセス初心者です。 フォームで取得した値をテーブルで検索して命令するために,次のようなことをしてみましたが,FindFirstのところでエラーがでます。 どうしたらよいのかご指導ください。 コマンドボタンのイベントプロシージャで Private Sub テストテーブル作成_Click() Dim gakki As Integer Dim test As Integer Me.学期 = gakki Me.テスト = test Call testテーブル作成 End Sub として,標準モジュールに Sub testテーブル作成() Dim myDB As DAO.Database Dim myRS As DAO.Recordset Set myDB = CurrentDb Set myRS = myDB.OpenRecordset("T_生徒テスト") myRS.FindFirst "学期ID=" & "" & "gakki" & "" & "AND テストID =" & "" & "test" & "" If myRS.NoMatch = False Then DoCmd.OpenQuery "Q_TSテストA" DoCmd.OpenForm "F_テスト" DoCmd.Close Else DoCmd.OpenQuery "Q_TSテスト" DoCmd.OpenQuery "Q_テスト" DoCmd.Close DoCmd.OpenForm "F_テスト" End If myRS.Close: Set myRS = Nothing myDB.Close: Set myDB = Nothing End Sub としました。よろしくお願いします。

  • アクセス2000(ADO)のレコード更新について

    1件しかレコードがない[リスト連番T]テーブルのレコードを読みだして、(フィールド)リストNOをプラス1して更新したいです。 DOAが混ざっているのか、下記のようにエラーがでます。プラス1して更新する正しいプログラムを教えて下さい。 Private Sub リスト_Click() Dim DBS As Databasu Dim CNC As New ADODB.Connection Dim RST As New ADODB.Recordset Dim LISTNO As Intejer Set CNC = CurrentProject.Connection RST.Open "リスト連番T", CNC, adOpenKeyset,adLockOptimistic, adCmdTableDirect LISTNO = RST!リストNO RST.Close Set RST = Nothing CNC.Close Set CNC = Nothing Set DBS = CurrentDb Set RST = DBS.OpenRecordset("リスト連番T") With RST -----.Edit で コンパイルエラー-----   メソッドまたはデータメンバーがみつかりません .Edit !リストNO = LISTNO + 1 .Update .Close

  • アクセス2003 「ODBC--リンク テーブル'テーブル1'での更新に失敗しました。」となる。

    Sub test() Public cn As New ADODB.Connection Public rs As New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.FullName rs.Open "Qクエリ", cn, adOpenStatic, adLockPessimistic rs("進捗") = "" rs.Update  ←ここでエラー rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub のコードを実行すると アクセスが「応答なし」になり、その後 「ODBC--リンク テーブル'テーブル1'での更新に失敗しました。」となります。 Qクエリはテーブル1とテーブル2でできています。 毎回発生するエラーではなく、エラーにならない時もあります。 何か原因がわかる方いらっしゃいますか? ご教授よろしくお願い致します。

  • Access 2003でサブフォームが更新されません。

    リストボックスの値を変更すると、サブフォームが更新されるようにしたいのです。 サブフォームのレコードソースはクエリから引用しています。 Dim db As Database Dim qry As QueryDef Set db = CurrentDb Set qry = db.QueryDefs("計画クエリ") qry.SQL = newSQL qry.OpenRecordset qry.Close db.Close Set db = Nothing Me!計画クエリのサブフォーム.Form.Requery という形で、更新しようとしても更新されません。詳しい方教えてください。

  • [ACCESS/VBA]動的にSQL文をテーブルから抽出する方法?

    ボロボロです。知恵が足りずとても困っています。どなたか教えてください。 テーブル「T_SQL」の各レコードに、 クエリのSQL文(フィールド名=「strSQL」)と クエリ名(フィールド名=「QName」)と 通しNo.(フィールド名=「No」) をデータとして入力し、アクション等に応じて、「T_SQL」から 抽出したSQL文を、 マクロの「プロシージャの実行」の プロシージャ名 SetSQL("クエリー1",FindSQL(No)) により クエリ「クエリー1」に代入したいのです。 現在以下の通りに作りました。 'データベース定義 Public db As Database 'レコードセット定義 Public rs As Recordset Public Function SetSQL(QName As String, strSQL As String) CurrentDb.QueryDefs("QName").SQL = strSQL End Function Public Function FindSQL(No As String) Set db = CurrentDb() Set rs = db.OpenRecordset("T_SQL", dbopendynaset) strcriteria = "[No]='" & No & "'" rs.FindFirst strcriteria FindSQL = rs!strSQL rs.Close db.Close End Function これで実行すると、 「コンパイルエラー メソッドまたはデータメンバが 見つかりません」 というエラーメッセージが出ます。 ちょこちょこいろんなところを修正してみても、 このメッセージだけでなく他にもいろんな エラーメッセージが出ます。 冒頭に書いたような機能を可能にするには、 どのように記述すればよいのでしょうか?? ほんとにほんとに困っています。どなたか助けてください。

  • ACCESSでテーブルを更新する時で

    テーブル(1)のある項目で、テーブル(2)のある項目を更新したいのですが・・    項目 → No ・・・ 更新a 更新b テーブル(1)  001     100 200 テーブル(2)  001      50  50          ↓          ↓ 【更新後】 001 100 200 どの様にすればできますか教えて下さいませんか。 《クエリーの更新を使えばできそうなんですが、実際にどうすれば良いのかよく解りません》       

  • パススルークエリ&ACCESSテーブル VBA抽出方法

    ACCESSパススルークエリでSQLサーバーのテーブルからデータをインポートする場合において ACCESSのテーブルにあるデータを抽出条件としたいのですがSQL文の記述方法がわからなくて困っております。 根本的な考え方が間違っている可能性が高いのですがどのように記述したらよいか教えていただけますでしょうか。 よろしくお願いいたします。 ・SQLサーバーのテーブル名(S_USR)   USRID  MAIL   10001  10001@test.com   10002  10002@test.com   10003  10003@test.com ・ACCESSのテーブル名(T_USR)   USRID   10001   10003 ・パススルークエリ名(Q_USR)←ACCESS上 ・欲しい結果(T_RESULT)←ACCESS上のテーブル   USRID  MAIL   10001  10001@test.com   10003  10003@test.com 自分で考えたVBAです。 Private Sub Command1_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim qDef As QueryDef Dim tDef As TableDef Dim SQLD As String Dim SQLA As String Set db = CurrentDb 'ACCESSテーブル内のデータを消す SQLD = "DELETE * FROM T_RESULT" DoCmd.RunSQL SQLD 'クエリの更新 db.QueryDefs.Delete "Q_USR" Set qDef = db.CreateQueryDef("Q_USR") 'ODBC接続実施 qDef.Connect = "ODBC;" 'フォームから取得したパラメーターを使ったクエリの設定 qDef.SQL = "select USRID, MAIL from S_USR where ID.USRID=S_USR" qDef.ReturnsRecords = True Set rs = qDef.OpenRecordset(dbOpenSnapshot,dsbSQLPassThrough,dbReadOnly) '追加クエリ SQLA = "INSERT INTO T_RESULT (USRID, MAIL) FROM Q_USR (USRID, MAIL) DoCmd.RunSQL SQLA rs.Close db.Close MsgBox "終了" Exit Sub End Sub

  • 同じテーブルのフィールドを使ったUPDATEしたい

    こんにちは。 いつも参考にさせていただいています。 本日は投稿側です。 やりたいことは「T_ALL」テーブルの加工した「受付番号」フィールドを 「お客様番号」フィールドに書き込むことです。 ACCESS VBAで以下のコードを書き、実行すると[受付番号]のとこで 「定義されていない」とエラーになります。 思考錯誤しましたが解決できず困っています。 ご教示ください。 よろしくお願いします。 ************************************************************************* Dim db As ADODB.Connection Dim rs As ADODB.Recordset Dim mypath, we As String Dim mysql As String Set db = New ADODB.Connection Set rs = New ADODB.Recordset db.Open "Provider=OraOLEDB.Oracle;Data Source=kcwf;User Id=kcwf;Password=kcwf;" rs.Open "SELECT * FROM T_ALL", db, adOpenDynamic, adLockOptimistic, adCmdText '***** 項目を更新 mysql = "UPDATE T_ALL SET お客様番号= 'B" & Mid([受付番号], 5, 9) & "'" db.Execute mysql 'Close rs.Close Set rs = Nothing db.Close Set db = Nothing *************************************************************************

  • フォームの再表示に関して

    過去の質問にも同じようなものがありましたので、参考にしながらやってみたのですが、うまくいかなかったので質問させて頂きます。 Windows2000・アクセス2000を利用しています。フォーム上で非連結のテキストボックス1つとサブフォームを作成しています。テキストボックスに[No]を入力で指定すると、テキストボックス更新時にサブフォームの内容が、その[No]のデータのみに抽出されて再表示するようにしたいと思っています。 SQLで並べ替えと抽出をしています。コードは下記のような感じで作成しています。 Private Sub 検索No_AfterUpdate() Dim Db As Database Dim Qd As QueryDef Dim No As Integer Dim Sql_Str As String Set Db = CurrentDb Set Qd = Db.QueryDefs("Q_抽出") No = [検索No].Value Sql_Str = "SELECT T_テンプレート明細.*" & _ " FROM T_テンプレート明細 INNER JOIN T_テンプレート ON T_テンプレート明細.テンプレートNo = T_テンプレート.テンプレートNo" & _ " WHERE [T_テンプレート明細].[テンプレートNo] = " & No & _ " ORDER BY [T_テンプレート明細].[テンプレートNo], [T_テンプレート明細].[テンプレートID];" Qd.Sql = Sql_Str サブフォーム名.Requery Qd.Close Db.Close End Sub サブフォームをrequeryすれば再表示するのかなと思っているのですが・・・・テキストボックスに更新をかけた後にクエリを確認するとSQLは一応指定出来ているようです。簡単な説明で分かりにくいかもしれませんがよろしくお願い致します。

  • 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