MSアクセス データの更新方法とは?

このQ&Aのポイント
  • MSアクセスにおけるデータの更新方法について詳しく教えてください。
  • MSアクセスで新規データを登録した後に、自動的に表示する方法について教えてください。
  • MSアクセスと比べて、「ファイルメーカー」というソフトウェアのスクリプトとは異なるアクセスのマクロの機能について教えてください。
回答を見る
  • ベストアンサー

MSアクセス データの更新

MSアクセス データの更新 メインフォーム[A]にデーターの一覧があり、新規データ[B]の登録は別フォームで行っています。 [A]・・データ入力用「いいえ」 [B]・・データ入力用「はい」 [B]で新規登録した後[A]に戻っても、その新規のデータは表示されず、レコード「更新」ボタンを手動で押すと表示されます。 自動で表示するには、どんなマクロになりますか? 「ファイルメーカー」にどっぷり浸かっていましたが、久々にアクセスに戻ってきました。 完璧にわすれています。 「ファイルメーカー」は、スクリプトだけで(それしか無い)処理できましたが、 アクセスのマクロだけで、「ファイルメーカー」のスクリプト程度の処理はできるでしょうか? VBは必要最小限にしたいのですが。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

#1です > 再クエリが1回分遅れます。 > [B]で何回か入力すると、その時の入力分は更新されず、 > 前回の入力分だけ更新されていきます。 > [B]で新規登録した後[A]に戻っても、 戻ると表現されていたのは、[B]を閉じる、で良かったのでしょうか。 [B]を閉じずに[A]に行ったり、[B]に行ったりしているのでしょうか。 閉じずに反映する時には、[B]の更新後処理イベントで、 オブジェクトの選択 フォーム, フォーム[A]名, いいえ 再クエリ をやってみてください。 この時、[B]がポップアップになっていない時など、[A]に表示が切り替わるので 再クエリの後に、 オブジェクトの選択 フォーム, フォーム[B]名, いいえ を追加して、[B]を表示するようにします。 また、[B]を閉じる方法が複数ある場合には、[B]の閉じる時イベントで オブジェクトの選択 フォーム, フォーム[A]名, いいえ 再クエリ をやってみてください。

situmonnsya
質問者

お礼

[B]はポップアップです。 [B]に「新規登録完了」ボタンを置いて、それにマクロをかいていました。 ・閉じる ・再クエリ の2行で、しっかりと親フォームに戻ってからの再クエリで希望どうりの動きができました。 そこで[B]に「新規登録キャンセル」ボタンを置いて ・コマンドの実行・・「元に戻す」 ・閉じる これもできましたが、これで良いのでしょうか? ただ、これだとID番号(オートナンバー)がインクリメントされてしまいます。 当然といえば当然なのですが 以前、アクセスを使った時は全てVBAで処理してましたが、マクロでも結構行けそうです。 ありがとうございました。

その他の回答 (1)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

フォーム[B]での記述になりますが、 例えば、閉じる時の記述が、   DoCmd.Close acForm, Me.Name, acSaveNo に、なっていたとした時、   Me.Visible = False   Screen.ActiveForm.Requery   DoCmd.Close acForm, Me.Name, acSaveNo と、してみてください。 フォーム[B]を非表示にした時に、アクティブになるフォームを再クエリして、閉じるものになります。 フォーム[B]が、いろいろなフォームから起動される時に使えるものになると思います。 但し、非表示にした時にアクティブになるフォームが呼び出し側でないことがあるのであれば、 フォーム[B]の開く時イベントで、呼び出し側を覚えておく処理が必要になります。 (この記述が必要であれば、補足してください) また、フォーム[A]からしか起動されないのであれば   Forms("フォーム[A]名").Requery   DoCmd.Close acForm, Me.Name, acSaveNo でも良いと思います。 マクロであれば、 オブジェクトの選択 フォーム, フォーム[A]名, いいえ 再クエリ 閉じる フォーム, フォーム[B]名, しない になるのでしょうか。

situmonnsya
質問者

補足

ご回答、ありがとうございます。 再クエリが1回分遅れます。 [B]で何回か入力すると、その時の入力分は更新されず、前回の入力分だけ更新されていきます。 ちなみに、テーブルとフォームしか作っていなく、クエリはまだない状態です。 >閉じる フォーム, フォーム[B]名, 確認 <--変更しました。 閉じる ・・・ 「しない」 ですと、 「引数'オブジェクトの保存'を指定した場合、'Close'マクロアクションを無効にしたり、埋め込みマクロから呼び出して実行したりすることはできません。」 とメッセージがでます。 たぶんフォーム[B]のプロパティかと思うのですが、'オブジェクトの保存'が見当たりません。 「ファイルメーカー」のスクリプトの手軽さにすっかりハマってしまったので、今回は全文マクロが理想なのですが・・・ よろしくお願い致します。

関連するQ&A

  • OFFICE アクセスのマクロで教えてください。

    アクセスについて、超初心者です。 アクセスのフォームに商品a、b・・それについてのそれぞれデータA、Bがあるとします。 表示したフォームに印刷ボタンをつけて、そのボタンに 各データA、Bをファイル名にもつレポートを印刷するマクロを作りたいのですが、 どうしたらよいでしょうか? マクロかVBAで、どのようにしたら、よいでしょうか?

  • access2010 マクロでの更新のキャンセル法

    ACCESS2010です。 フォームの更新前処理でマクロを指定していますが、その中で条件によっては 更新処理をさせないためにはどうすればいいでしょうか。(マクロを使っています) ACCESS2003のときは「イベントのキャンセル」でできたような気がしたので 更新前処理で 「イベントの取り消し」 を指定したのですが、入力されて しまいました。

  • ACCESS 合計の更新

    Accessにて、メイン・サブ形式のフォームがあります。 サブフォームには、取引のデータを入力するように設定しています。 ●サブフォーム  日付 重量 ・・・  メインのフォームには、サブフォームの合計の重量を表示させています。 サブフォームにて、重量を入力したときに、合計を更新させたいのですが、 次のレコードに移るなどしないと更新されませんよね? そこで、次のマクロを試してみたのですがうまくいきませんでした。 マクロにて、コントロールの更新後に  ・再クエリ  ・最後のレコードに移動(サブフォームを指定)  ・コントロールの移動 結果は、サブフォームが開いていませんというエラーが表示されます。 重量の間違いをなくすためにも、重量を入力または、更新したときに、 合計の重量も更新したいので、どなたかご教授願います。

  • Access、更新用データと連結したフォーム

    度々の質問で恐縮です。 検索フォームの検索結果を、レコードセレクタのWクリックで、 更新するためのテーブルと連結したフォームを開いて、 そのフォーム項目に「値の代入」をしています。 で、その「更新用データのフォーム」で更新項目を編集し、 ボタンを押すと「フォームと連結したテーブル」を使った更新クエリを実行する、 というマクロを実行するようにしてみました。 その処理を実行後、「更新用のフォーム」を閉じて、最初に書いた検索フォームで 検索すると、更新実行結果が反映しません。 レコードセレクタのWクリックを抜きにして、直接「更新用フォーム」を開き、 そのフォームにある「更新用のマクロ」を実行するボタンをキックすると反映します。 で、今は更新用フォームからマクロをキックするボタンは消して、 更新用フォームを閉じると、更新用データのテーブルは更新項目を反映しますので、 直接「更新用マクロ」をキックするだけのボタンしかないフォームを別に開いて、 そのボタンを押すようにしています。 最初の構成で、つまり、「更新用フォームで編集し、その画面のボタンで 更新用マクロをキックして更新実行したい」のですが、編集内容が 「更新データテーブル」に反映するには、どうすれば良いでしょうか? くだくだしい説明を書いてしまい、まことに申し訳ありませんが、よろしくお願いします。

  • フォーム内のデータをすべて更新したい

    フォーム内のデータをすべて更新したい ACCESSでデータ入力ができるようにフォームを作成しました。 わりと頻繁に同じ様な内容のデータを入力することがあり、レコードのコピーをボタンウィザードのレコードの複製を使わず、選択しているレコードで必要な部分のみをコピー用に用意したテーブルに追加して、追加したテーブルから元のテーブルに追加するというマクロを作成しました。 テーブルにはデータは追加されているのですが、フォーム上には「F5キー」やメニューの「すべて更新」ボタンをクリックしないとフォーム上に現れません、マクロ「再クエリ」や「コマンドの実行」-「最新の情報に更新」を入れてみましたが、「F5キー」やメニューの「すべて更新」ボタンをクリックした時のような動作はしてくれませんでした。 どういったマクロを作ればよいかご教示いただけないでしょうか。 緒ろしくお願いいたします。 ACCESS 2007を使っています

  • accessのデータ更新について

    テーブルBの内容をテーブルAに反映させようとしてます。 ●テーブルBの内容 顧客コード 登録日 ステータス ステータス更新日 1 2012/01/01 1 2012/01/01 1 2012/01/01 2 2012/01/02 1 2012/01/01 3 2012/01/04 1 2012/02/02 1 2012/02/03 1 2012/02/02 2 2012/02/04 1 2012/02/02 3 2012/02/06 1 2012/02/02 4 2012/02/08 ●テーブルAの内容 顧客コード 登録日 ステータス 1 2012/02/02 1 2012/01/01 それぞれのテーブルの「顧客コード」、「登録日」をキーにし、テーブルBのステータス更新日の最新の日付のステータスをテーブルAに反映させたいのですが、うまく最新の日付のデータを取得してくれません。どうすれば正しくデータを反映することができますでしょうか? UPDATE b INNER JOIN a ON (b.登録日 = a.登録日) AND (b.顧客コード = a.顧客コード) SET a.ステータス = [b]![ステータス]; という感じにしてます。 処理後結果のテーブルAは、以下になります。 顧客コード 登録日 ステータス 1 2012/02/02 3 1 2012/01/01 2 本当は、以下にしたいのですが、、、、 顧客コード 登録日 ステータス 1 2012/02/02 4 1 2012/01/01 3 テーブルBの並び順をステータス更新日の降順や昇順にかえたりし、何度となくやりましたが、うまくいかない状況です。 なにとぞよろしくお願いいたします。

  • MSアクセス2010と2003

    アクセスの帳票フォームで入力用チェックボックスが84個(ck1からck84)あります。表示データは10個程度ですが、このチェックマークの更新前処理で、同じ場所へのダブリが発生しないような処理をしています。フォームフッターにテキストボックスを84個配し(Text1~Text84)、Text1はCk1の合計を、Text2はCk2の合計を出すようにしておき、CK1の更新前処理に Select Case Me![Text1] Case "" If (Me![ck1]) = -1 Then MsgBox "Please wait" Cancel = True Me.Undo End If Case "-1" If (Me![ck1]) = -1 Then MsgBox "Already used." Cancel = True Me.Undo End If End Select またチェックマークを入れることにより、計算処理をして結果をチェックボックスの下に表示しているためme.Refreshを更新後処理に入れております。アクセス2003+Office2003SP3では問題なく動きますが、アクセス2003+Office2003SP1、アクセス2010+Office2010SP1では次のチェックボックスにチェックを入れるのに5~6秒程掛かります。(アクセス2003+OfficeSP3ではチェックマークをつけて次のチェックマークを付けるのに待ち時間はありません。)したがって使い物になりません。何か考えられることはありますでしょうか。

  • ACCESSのフォームで同じ所属課入力の手間を.

    access2000で社員名簿のフォームで所属課名等、同じデータが続く項目が幾つかあるのですが、入力に大変手間いります。何度かQ&Aで見た事がありますが”更新後処理”とか”マクロ”とかで出来るようですが、全くの無知のため初心者向けに教えて頂けないでしょうか。

  • Accessデータ入力について

    Access2000です。 フォームにてデータ入力をしており、以下の処理をしたいと思っています。 **** 1レコードの入力が終わってENTERで格納する前にメッセージを表示する。 メッセージのOKを選択するとレコードがテーブルに格納される。 キャンセル等を選択するとそのレコードはテーブルに格納せず削除される。 マクロでやってみたのですが、初心者なのでよくわかりませんでした。 力を貸してくださいませんか。

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

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