• 締切済み

ACCESS:フォームの全項目入力後に書込

フォームでフィールド毎のデータ書込/更新ではなく、全フィールド入力完了後に「登録」ボタン押下で一括書込させたいのですが、どんな機能を使ってよいのか、キーワードでもかまいませんので教えてください。やりたいことなのですが例えば、顧客管理とかのイメージですが1画面で基本情報と、家族構成と、購入品目とかを目一杯表示させておいてこれを入力/修正画面とします。入力時にはフィールド毎に都度書込みはせず、全フィールド入力完了後に「登録ボタン」押下で一括書込みさせたいんです。修正の場合も同じです。 環境は、少々古いのですがWin98でAccess97です。 よろしくお願いします。

みんなの回答

  • gadd3
  • ベストアンサー率46% (211/451)
回答No.2

当方Access2000+Win98無印です。 Access2000での事しかわからないのですが、また、maruru01さんの補足になってしまいますが…、例えばAccess2000の場合では、maruru01さんのコメントされた、 >ところで、テーブルに連結したフォームなら、フィールド毎にはテーブルには >書き込まれないと思うのですが。 のとおりです。 フォームからの入力データの完全保存・反映は、フォームを閉じたとき、または、次の(前の)レコードへカーソルが移動した時しかされませんので、その時点まではフォームのテキストボックスにはデータは表示されていますが、まだ完全に書き込み・更新(反映)はされていません。すべての入力データについてです。 (単票フォームなら次(前)ページへ、帳票フォームなら次(前)の行へカーソルが移動するまで、データは書き換え・反映されません。) その証拠に、テーブルを開きながら、連結フォーム(単票形式)にすべてのデータを入力すると、フォームから入力したと思っていたデータがテーブルにはまったく入力されません。次ページ、または前ページへカーソルが移動するといっせいにレコードが表示(または書き換え)されます。 フォームに全データ入力したあと、次ページまたは前ページへ移動する前にテーブルを開いても同じです。 また、フォームで入力したばかりのデータはレコード移動しないと、例えばレポート印刷するときにそのデータの分はすべて空になって印刷されます。 もし、レコード移動する前(またはフォームを閉じる前)にフォームの入力内容をテーブルに反映したかったら、フォームをアクティブにしてから「レコード」メニューの「更新」を押さなければなりません。要はこの「更新」が、pyo123さんのおっしゃる「登録ボタン」に相当するのではないかと思います。 VBAでは Me!Refresh などのコードが「更新」に相当します。 ただ、レコード移動した時や「更新」をクリックした時はいいのですが、前述のようにフォームを閉じた時にもフォーム上の入力データは必ず保存されてしまいます。ですので、フォームを閉じたときにすべての入力が破棄されるようにしたい場合は、DAO(DataAccessObjectだったかな…)を使うと良いかもしれません。 ただ、かなり面倒くさいです。 例えばフォーム上のテキストボックスのすべて(または主キーと連結したテキストボックス以外のすべて)を「非連結」にして、いちいちデータを表示、更新、追加等しなければなりません。 詳細は、DAO(ADOは97で使えましたっけ…?)のことについて書いてあるWebページや参考書をあたってください。 データ表示にはDAOでレコードセット(テーブルやクエリ)を開いてテキストボックスへ表示する方法などがあります。(表示に関してだけはDAOだけではなく、DLookup関数も使えるみたいですが、動作スピードについてはわかりません。) 書き換えに関しては Editメソッド、Updateメソッド、 新規レコードの追加には AddNewメソッド、Updateメソッド、 レコードセット内でのカレントレコード移動には、MoveNextや、MovePrevious、などを使います。 ご参考になるかどうかわかりませんが、例えばフォーム上に表示された主キーのレコードのみを開いて、それをフォーム上に表示するには以降のようなコードを書きます。(フォームのレコード移動時イベントなどに) 状況は、連結フォームで、主キーのテキストボックスのみがテーブルの主キーフィールドと連結し、あとはすべて非連結の場合です。その他は以下です。 ・フォーム上のテキストボックス名はtxt01とtxt02の2つしか無い。 ・ソースとなる連結テーブル名が「テーブル01」 ・主キーフィールド名が「主キー01」 ・「主キー01」と連結する、フォーム上のテキストボックス名が「主キーtxtbox」 ********************* Dim db As DAO.Database Dim rs As Recordset Dim sqlstr As String ' レコードの抽出条件を格納する変数 Set db = CurrentDb sqlstr = "SELECT * FROM テーブル01 WHERE 主キー01 = " & Me!主キーtxtbox Set rs = db.OpenRecordset(sqlstr) ' 抽出条件にあてはまるレコードセットを開く Me!txt01 = rs!フィールド名01 ' フィールド名01 はtxt01に表示したいフィールド名 Me!txt02 = rs!フィールド名02 ' フィールド名02 はtxt02に表示したいフィールド名 Set rs = Nothing Set db = Nothing 以上ご参考になれば…。(乱文でわかりにくかったり、見当違いでしたらごめんなさい。)

全文を見る
すると、全ての回答が全文表示されます。
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 例えば、フォームモジュールの宣言部に、 Private flgSave As Boolean などとフラグを宣言しておいて、 登録ボタンのクリックイベント内でのみ、 flgSave = True となるようにしておき、(それ以外の場合は常にFalseのまま) フォームの更新前処理イベントで、 If flgSave = Flase Then   MsgBox "登録ボタンで保存して下さい。"   Exit Sub End If のように判定してはどうですか。 ちなみに、登録ボタンのクリックイベントでの更新処理後には、再びFalseをセットしておきます。 ところで、テーブルに連結したフォームなら、フィールド毎にはテーブルには書き込まれないと思うのですが。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • アクセスのフォームの必須項目入力確認方法について

    アクセスのフォームの必須項目を入力していないと「閉じる」ボタンを押下したとき、「○○入力項目に入力がない」というエラーメツセージが出るようにし、入力完了後、「閉じる」ボタンを押下すると閉じるようにしたいのですが・・・

  • Access2002 フォーム上にないフィールドに入力するには

    フォーム上にあるボタンを押すと、あるフィールドに数値を入力する VBAを作りましたが、フィールドには入力されませんでした。 色々やってみたらフォーム上にフィールドが無いと入力されないようでした。 これはAccess2002の仕様なのでしょうか。 それともそのための表記があるのでしょうか。 例) 顧客ID = 1 単純にこれだけのことがしたいのですがうまくいきません。 よろしくお願いします。

  • Access:検索フォーム

    Access:検索フォーム クエリを基に作成したフォームで「日付2」が変動する検索フォームを作りたいのですが上手く動作しません。 不足などを教えてください; Access2007/WinXP クエリ名 q_出席一覧絞込 1)フィールド名 日付1  クエリ条件 >#2010/01/01#       (2010/1/1以降) 2)フィールド名 日付2  クエリ条件 ([Forms]![出席者絞込]![検索日]に入力した日付以降の日付) フォーム名:出席者絞込 帳票フォーム 1)テキストボックス名:検索日   定型入力: 0000/00/00;0;*   非連結 2)ボタン名:検索ボタン1   クリック時イベントプロシージャ:   Private Sub 検索ボタン1_Click() Me.Requery   End Sub また、フォーム上で元テーブル「出席一覧」のフィールド「単価」の修正機能を加えたい状態です。 (クエリにも「単価」は呼び込んであります) クエリ元のフォーム上で修正>ボタンクリック時にRequeryを記入、という考えでいいのでしょうか? 参考になるサイトなどあればご紹介ください。

  • Access 既に開いているフォームへの値渡し

    Access初心者です。 業務管理DBを作成し、行き詰ってしまいました。 どなたかアドバイスお願いいたします。 フォームA:  受付日付、担当、顧客情報、注文内容などそれぞれのマスタテーブルからおもなフィールドを  クエリで作成 フォームB:  顧客情報テーブルを単票で作成 注文受付時に顧客がリーピータでない場合、フォームAからコマンドボタン実行し、 フォームBを開き、顧客情報テーブルに新規登録します。  《AからBをOpen》 フォームBで顧客情報の新規登録完了後、コマンドボタンを押下し、 その値(顧客ID)をフォームAに渡したいのですが、うまくいきません。  《B→A 値引き渡し》 --------------- Private Sub cmd_BT_Click() DoCmd.OpenForm "フォームA", , , "顧客ID=" & Me.顧客ID End Sub --------------- 他のフォーム間 《A→C》 では、上記のコマンドで正常に動作することを確認できています。 フォームA側のプロパティなど調べましたが、見当がつきません。 こういう場合は、どのあたりを手掛かりに調べればよろしいのでしょうか。 キーワードなどなんでも結構です。 用語などまだ理解していないところはありますが、 なにとぞご教示願います。

  • ACCESSでデーフル作成入力フォームで入力しながら、クエリのデータを参照したい

    ACCESSで売上明細テーブルを作成し、入力用のフォームを作成しました。他に顧客マスタテーブルがあります。売上明細には顧客CDフィールドがありますが、顧客名等はマスターに存在するため設けてません。しかし売上明細入力時に顧客CDを入力した時点で顧客名の確認がしたいのです。そこで入力フォームの顧客CDの隣に非連結でテキストボックスを作り、そこに顧客名を表示したいのです。売上明細には顧客名のフィールドは追加したくありません。ただ参照したいだけです。顧客マスタと売上明細で顧客CDをキーにクエリを作成し、明細に対応する顧客情報は顧客情報検索というクエリで作成済みです。入力フォーム画面の非連結のフィールドのプロパティのコントロールソースに =DLookup("[顧客名]","顧客情報検索","[顧客CD] =" _ & Forms![売上明細入力Form]![顧客CD]) と表記しましたがエラーになります。 最初はコントロールソースに直接顧客情報検索クエリの顧客名フィールドを表記し、フォーカス取得時にクエリを開くマクロを実行していました。でもやはり表示されませんでした。 顧客名の設定をどのように設定すればいいのですか? コントロールソースでの設定だけでは無理なのでしょうか? よろしくお願いします。

  • access2000での重複不可項目の入力

    access2000,WIN98SEの環境です。 顧客コード・・・テキスト型、主キー、重複不可 顧客名・・・テキスト型 住所・・・テキスト型 というテーブルを作成し、そこへ登録するフォームを作成しています。 顧客コードは修正時は入力不可としており、追加というボタンを押すとそこへ移動できるようにしています。 追加時に顧客コードで既に登録してあるコードを入れると、Dcount関数を用いて重複レコードがあった時はエラーメッセージを出しています。 その後、カーソルは顧客コードの末尾に移り(100|という感じです)、backspaceキーで100を消して再度入れ直そうとすると再び重複エラーのメッセージが出てしまいます。 Escキーを押すと、コード自体がシロ抜きになり入力することができるのはわかったのですが、Escキーを押すという行為をVBAで現すことはできるのでしょうか? よろしくお願い致します。なお、マクロは使用しておらずVBAでのコーディングで処理をしています。

  • DBに入力されている値のセレクトフォームを受け取りたいです

    こんにちは。 たびたびすみません・・・・。 MySQLのテーブルの顧客名をセレクトメニューで 表示できて大喜びしていたのですが・・・。 【登録】→【確認】→【MySQLの該当テーブルに保存】 としたいのです。 テキストエリアで入力した項目は、【確認】画面で <?php echo htmlspecialchars($_POST["siire_no"]) ?> と入力すると、ちゃんと表示されるのですが・・・。 先日教えて頂いた、テーブルからセレクトメニューを作る コードを使わせて頂いて $res=mysql_query("select * from kokyaku"); while ( $rows=mysql_fetch_array($res) ) {   print "<option value=\"".$rows['kokyaku_id']."\">".$rows['kokyaku_name']."\n"; } と書いて、【確認】画面で <?php echo htmlspecialchars($_POST["kokyaku_id"]) ?> とすると、顧客テーブルで指定していた、顧客の番号が 表示されます。 これを、siireテーブルに保存するときの顧客情報 フィールドには、顧客番号で入れたいけれども、 【登録確認】画面では、番号ではなく、顧客名を 表示させたい場合は、どのように記述すれば よいのでしょうか・・・・。 ためしに、 <?php echo htmlspecialchars($_POST["kokyaku_name"]) ?> と書いてみたりしたのですが 【確認】画面で、顧客の欄だけ何も出なくなったり してしまいました。 どうかご指導よろしくお願いいたします。 使用環境:PHP5+MySQL4+Apache

    • ベストアンサー
    • PHP
  • access2007 情報入力フォームの作成につい

    メインメニューのレイアウトで、情報入力ボタンと印刷ボタンを設定してあります。 情報入力ボタンをクリックすると「担当・顧客選択メニュー」に移ります。 「担当・顧客選択メニュー」の構成は 担当営業の選択 → コンボボックス 顧客情報(概要) → サブフォーム(担当営業コードで連結) となっており、担当営業を選択すると担当顧客がサブフォームに表示される 様になっています。 サブフォーム上の顧客番号をダブルクリックすると 「顧客情報入力フォーム」の同一顧客番号の情報へと移動し、顧客情報の 追加や編集がでいる様になっています。 今まで、直接「顧客情報入力フォーム」をあけると、画面下のレコード移動ボタンが 1/XXXXとなり、全顧客数と表示されている顧客が何番目の顧客であるかが 表示されていました。 今回、「担当・顧客選択メニュー」から上記の方法で「顧客情報入力フォーム」を 開けるとレコード移動ボタンの表示が1/1となり、その右にフィルタ適用と表示 されます。これの理屈は理解できるのですが、レコード移動ボタンを押すと 2/2となり、真白なブランクフォームが表示されてしまいます。 また、「担当・顧客選択メニュー」からダブルクリックで「顧客情報入力フォーム」へ 移動すると、同一顧客番号で移動しているはずが顧客番号がブランクの画面が 表示されてしまいます。「戻る」ボタンで再度同じ事をやると、今度はちゃんと 表示されます。 これがなぜそうなってしまうのか全くわかりません。 フィルタがかかっている状態で2/2となるのはなぜなのか、 ダブルクリックで同一顧客番号へ移動するはずが顧客番号なしのブランクフォームが 表示されるのはなぜなのか? お心当たりのある方、改善策のヒントを頂ければと思っております。 宜しくお願い致します。

  • ACCESS2000でクエリで抽出したレコードをフォームに表示するには

    A顧客テーブルで作成したフォームからコマンドボタン(電話番号検索)押下時に 電話番号入力画面が出て入力した電話番号とマッチした顧客レコードをフォームに 表示させたいのですが上手く出来ません。 現在進めている方法では何がダメなんでしょうか(以下は考え方) A顧客テーブルから作成したフォムに電話番号コマンドを作成してコマンドを 押すとクエリの実行をさせる。クエリはA顧客テーブルのフィールドを全て選択して抽出条件に[電話番号入力]としている。 (結果) ・フォームを開くと先に電話番号入力が出てくる、先にフォームが開かない。 ・電話番号検索コマンドボタンを押すと抽出条件に合ったレコードはデーターシートビューに表示される。 よろしくお願いします

  • ACCESSのデータ入力

    access2000です。 本を読んでデータベースを作ろうとしているのですが テーブルで、入力したいフィールドの名称を登録して フォームで入力画面を作りました。 これでは フォームに入力したデータは左上にある▲みたいなものを押さないと登録されないようです。 フォーム上に大きなボタンでテーブルに登録したいです。 本には載っていないのですが どうすればいいのでしょうか?

このQ&Aのポイント
  • PX-M5081Fを利用しています。ADFからコピーしようとしても自動でコピーが始まりません。コピーボタンを押してコピーしようとすると、紙詰まりのエラーが毎回表示されますが、何も詰まっていません。
  • 両面コピーをするのにとても不便なので、解決方法を知りたいです。
  • EPSON社製品についての質問です。
回答を見る

専門家に質問してみよう