ACCESS/VBA 追加レコードが表示されない

このQ&Aのポイント
  • ACCESS 2003 で開発しています。フォームのデータソースがテーブルAで、テーブルAの主キーはオートナンバーです。フォーム上のボタンをクリックすると、追加クエリを実行して、テーブルAに1レコード追加し、フォームにそのレコードを表示したいのですが、クエリ実行前の最終レコードが表示されてしまいます。テーブルAを見ると、オートナンバーがふられたレコードが末尾にちゃんと追加されています。
  • ACCESS 2003の開発環境で、フォーム上のボタンをクリックすると追加クエリが実行され、テーブルに新しいレコードが追加されるはずです。しかし、クエリ実行前の最終レコードが表示されてしまうという問題が発生しています。テーブルを確認すると、新しいレコードが末尾に正しく追加されていることがわかります。
  • ACCESS 2003で開発している際に、フォーム上のボタンをクリックして追加クエリを実行すると、テーブルに新しいレコードが追加されるはずです。しかし、クエリ実行前の最終レコードが表示されてしまい、追加されたレコードが表示されません。テーブルの末尾には正しくレコードが追加されていることがわかります。どのようにすれば、直前に追加したレコードをフォームに表示させることができるでしょうか?
回答を見る
  • ベストアンサー

ACCESS/VBA 追加レコードが表示されない

ACCESS 2003 で開発しています。 フォームのデータソースがテーブルAで、テーブルAの主キーはオートナンバーです。 フォーム上のボタンをクリックすると、追加クエリを実行して、テーブルAに1レコード追加し、 フォームにそのレコードを表示したいのですが、 クエリ実行前の最終レコードが表示されてしまいます。 テーブルAを見ると、オートナンバーがふられたレコードが末尾にちゃんと追加されています。 Dim dbs As Database Dim Qdf As QueryDef Set dbs = CurrentDb Set Qdf = dbs.QueryDefs("Q_データ追加2") ←追加クエリ Qdf.Execute Me.Refresh '* 最終レコードを表示 DoCmd.GoToRecord , , acLast どのようにすれば、直前に追加したレコードをフォームに表示できるのか おわかりの方がおられましたら、お教え下さい。ちなみに、ACCESSは、   「既定の開くモード 」:共有モード   「既定のレコードロック」:ロックしない      という設定になっています。 よろしくお願い致します。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

>Me.Refresh を Me.Requery に。

nakusa2012
質問者

お礼

Me.Requery で正しく動作しました。 フォームのデータソースがクエリの時に有効だと思っていました。 ありがとうございます。

関連するQ&A

  • Accessでの新規レコードの追加の方法

    Windows XP上でMicrosoft Access 2000を使用しています。 オートナンバー型フィールド1つのみを含むテーブルに新規レコードを追加したいのですが、クエリやそれを基にしたフォームを介した方法はもちろんのこと、テーブルをデータシートビューで表示した状態でも追加することができません。 例えばレコードセレクタからレコード追加を選んでレコード保存を選んでも追加されません。 このテーブルに別のフィールドを追加してデータを入れるとレコードの追加が可能なのですが、オートナンバー型フィールド1つのみではうまくいきません。 どなたかオートナンバー型フィールド1つのみを含むテーブルに新規レコードを追加する方法を御存知でしたら御教示下さいませ。

  • アクセス VBAでレコードが追加できない

    お世話になります。 フォームのボタン(コマンド1)をクリックして テーブルにレコードを追加したいのですが、うまくいきません。 SQLの引数value('intNumber')を実数(例えば'3')とかにすると うまく1レコード追加されるのですが、新規レコードとして 連番で追加させたいので困っています。 宜しくお願いします。 Private Sub コマンド1_Click() Dim dbDao As DAO.Database Dim stSql As String Dim intNumber As Integer intNumber = DMax("[管理ID]", "[テーブル名]") + 1 Set dbDao = CurrentDb stSql = "insert into テーブル名 (管理ID,管理2,管理3) values ('intNumber','99999','99999');" dbDao.Execute stSql dbDao.Close: Set dbDao = Nothing End Sub

  • ACCESS レコードセット

    非連結フォーム(frm_B)のOPEN時にADOレコードセットでデータを表示させ、更新ボタンを押すと、追加クエリでそのフォーム上で表示されたデータをテーブル(tbl_B)に新規登録させ、さらにその非連結フォームには別のフォームの内容を表示させるVBAを書きましたが、最後に別のフォームの内容で非連結フォームにデータをセットしたとき?にテーブルのデータも更新されてしまいます。最初にテーブルに追加したデータとは切り離したいのですがどうすればうまくいくのでしょうか。 ・フォームfrm_BをOPEN 'DAOレコードセット Dim dbDAO As DAO.Database Dim rsDAO As DAO.Recordset Dim stSQL As String stSQL = "SELECT No.,規格No.,改訂No. FROM tbl_B " _ & "WHERE 規格No. ='" & Forms![frm_A].[規格No.] & "'" _ & "AND 改訂No. =" & Forms![frm_A].[改訂No.] & "" 'DAOレコードセット Set dbDAO = CurrentDb Set rsDAO = dbDAO.OpenRecordset(stSQL) Set Me.Recordset = rsDAO Me![No.].ControlSource = "No." Me![規格No.].ControlSource = "規格No." Me![改訂No.].ControlSource = "改訂No." 'DAOレコードセットクローズ Set rsDAO = Nothing Set dbDAO = Nothing ・更新ボタンクリック Private Sub cb_kaitei_Click() Dim stDocName As String   '追加クエリ stDocName = "q_B" DoCmd.OpenQuery stDocName, acNormal, acEdit Forms![frm_B].SetFocus Me![No.] = Forms![frm_A].[No.] Me![規格No.] = Forms![frm_A].[規格No.] Me![改訂No.] = Forms![frm_A].[改訂No.] ・ このときにレコードセットで追加したレコードのほうも更新されてしまいます。これを別のレコードと判断させたいのです。よろしくお願いします。

  • テーブル作成クエリーでオートナンバー型のレコードを作成したい。

    教えてください。Access2000で困ってます。 テーブル作成クエリーから作成するテーブルAにオートナンバー型のレコードを追加したいのですが、どうしたらいいでしょうか? テーブルAに先にオートナンバー型のレコードを追加しておいても再度クエリーを実行するとなくなってしまいました。 できればクエリーでなんとかしたいのですが無理なんでしょうか? ご存じの方、お願いします! もう、頭がパンクしました!

  • 抽出条件のあるクエリにADOで新規にレコードを追加

    抽出条件のあるクエリにADOで新規にレコードを追加する事は不可能でしょうか? フォーム1にテキスト0を配置し SELECT テーブル1.色 FROM テーブル1 WHERE (((テーブル1.色)=[Forms]![フォーム1]![テキスト0])); というクエリを作成しました。 テーブル1のデータは 色 黄 黒 青 赤 です。 ADOでクエリにデータを追加したいのですが Public Sub Exsample() Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Dim SQL As String Set CN = CurrentProject.Connection Set RS = New ADODB.Recordset SQL = "SELECT * FROM クエリ1" ここの時点で 「実行時エラー:'-2147217904 (80040e10)': 1つ以上の必要なパラメータの値が設定されていません。」 と表示されてしまいます。 「クエリ1」を「テーブル1」にしたらうまくいきます。 だったらテーブルに追加したら?と思われると思いますが 今回は例であり、実際はクエリに追加したいです。 回避方法があれば教えてください。 よろしくお願い致します。 (ヴァージョンはアクセス2003です)

  • Accessのテーブルのレコード追加について

    お世話になります。 テーブルのレコードをコピーして、別のテーブルに 「編集」の中の「追加貼り付け」でテーブルのレコードを 追加しました。 しかし、データ型をオートナンバーにしているフィールド があったのですが、追加したレコードの部分のナンバーが 連番になりません。 どの様にしたら、追加した分も連番になりますでしょうか。 お教え下さいます様、宜しくお願い致します。

  • Access2007でフォームのリストボックスから

    Access2007でフォームのリストボックスから選択したフィールドをクエリしたいのですが どうもうまくいきません。 テーブル数は10個くらいあり、全テーブルのフィールド数は100超あります。 テーブル1に一意のIDがあり、それに対して他のテーブルとリレーションシップで繋いでいます。 1.全テーブルのフィールドリストを作るのに「全テーブルクエリ」を作成 (テーブル1.IDのLEFT JOINでくっつけています。) 2.全テーブルクエリのコピーを作成し、リストから選択したフィールドのみを表示 3.選択した全フィールドのデータにNull以外のデータのみを表示するようフィルターをかける 以下、作成したVBAですが、実行すると、3.がうまく動いてくれず、Null値も表示してしまいます。 しかし、エラーは出ません。 フィルター適用になっていますが、最後のフィールドにフィルターマークが出ているだけで 実際はかかっていません。。 ========== Option Compare Database Option Explicit Dim dbs As Database Dim qdf As QueryDef Dim IDX As Long 'リストのインデックス用 Dim i As Integer Dim F_name() As String Dim strDate As String '現時刻取得 Dim Path As String Public Sub 抽出_Click() Set dbs = Application.CurrentDb strDate = Format(Now, "_mmdd_hh:mm") If Me.リスト.ItemsSelected.Count = 0 Then MsgBox "抽出する項目を選択してください。" Exit Sub Else Application.DoCmd.CopyObject , "抽出結果" & strDate, acQuery, "全テーブルクエリ" Set qdf = dbs.QueryDefs("抽出結果" & strDate) For IDX = 1 To Me.リスト.ListCount Let qdf.Fields(Me.リスト.ItemData(IDX - 1)) _ .Properties("ColumnHidden").Value = Not (Me.リスト.Selected(IDX - 1)) Next End If DoCmd.OpenQuery "抽出結果" & strDate ReDim F_name(qdf.Fields.Count) For i = 1 To qdf.Fields.Count F_name(i - 1) = qdf.Fields(i - 1).Name If qdf.Fields(F_name(i - 1)).Properties("ColumnHidden").Value = True Then '項目が非表示の場合何もしない Else       'Null以外のデータを抽出 DoCmd.ApplyFilter "抽出結果" & strDate, "('" & F_name(i - 1) & "') Is Not Null" End If Next i dbs.Close Set qdf = Nothing Set dbs = Nothing End Sub ============== ですが、違うやり方があるのではないか・・と1週間くらい悩んでおります。 やりたいことは、 (1)まず100個以上あるフィールドをフォームのフィールドリストから選定。 (2)選定したフィールドのデータにNullまたは長さ0の値があればその行ごと非表示にする。 この2つです。 とりかかってから1カ月以上経ちます。。 お知恵をお貸しください!!!

  • ACCESS2000VBAでエラー「型が一致しません」

    ACCESS2000で、フォーム上にボタンを作り、そのボタンをクリック時に 以下のイベント プロシージャを実行させています。 Dim dbs As Database Dim rst As Recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("採番_相談者") Dim Number rst.MoveFirst Number = rst!相談者番号 Number = Number + 1 Me.相談者NO = Number '相談者NOはフォーム上のテキストボックスです。 で上記 Set rst = dbs.OpenRecordset("採番_相談者") の所で、「実行時エラー 13 型が一致しません」とエラーになります。 テーブル:採番_相談者は、オートナンバー型のIDフィールドと相談者番号という7桁のテキスト型で ”1000001”が入っています。(ちなみに、数値型に変えても同じエラーでした。) 詳しい方教えてください。お願いします。

  • Accessのクエリでレコード追加

    Access初心者です。 バージョンは2010をつかっています。 テーブルを14テーブル含み、フィールド数が100ほどある選択クエリを作りました。 抽出条件などは設定していません。 このクエリで新しくデータを入力、レコードを追加し、上書き保存した後クエリを閉じます。 それからまた、そのクエリを開くとレコードが追加されていません。 テーブルにはその入力したデータは追加されています。 このクエリにもそのデータを追加表示させるためにはどうすればいいですか? 表示されない原因はなんなのかお教えお願いします。

  • MS-Access レコードセレクタのイベント

    こんにちは。 MS-Access2003です。レコードセレクタをダブルクリックした時に以下のようなイベントを設定したいと思っています。 1.テーブルの全データを一覧で表示するクエリを連結した、表形式のフォーム(フォームA)が  あり、そのレコードセレクタをダブルクリックします。 2.別に、そのテーブルを連結したフォーム(フォームB)があり、1.でダブルクリックしたデータが、  その「テーブルを連結したフォーム」に表示されて欲しい。 フォームAは参照のみであり、フォームBは更新可能な設定です。 レコードセレクタのイベントはマクロで組みたいのですが、フォームBを開いた後どうすれば そのデータをフォームBでフィルターをかけたように表示できるのかが分かりません。 ご教授いただけると助かります。 よろしくお願いいたします。

専門家に質問してみよう