- ベストアンサー
アクセスデータのフォームに追加したい方法とは?
- アクセスのフォームで抽出したデータに追加をしたい方法を教えてください。
- アクセスの初心者ですが、フォーム画面に新たなデータを追加する方法を教えてください。
- フォームで入力したデータをテーブルに追加する方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.1,2です。 > 非連結ということは、ここのフォームの元になっているテーブルとリンクしてない > という意味ですよね? (中略) > それだから、この=[ORDERNo.検索]は機能しないのでしょうか? 既定値に設定する式の参照元には、コントロールが連結か非連結かに関係なく、 指定することができます。 (なお、連結/非連結については、上記の認識でOKです) 但し、既定値を設定したのが連結コントロールであれば、「フォームの再クエリ」や 「フィルタの適用」または「解除」が行われると同時に、その内容が反映されますが、 非連結コントロールだった場合はそれらの操作では反映されず、フォームを開いた とき以外で既定値を変更するには、VBAなどで式自体を再度設定してやる必要が あります。 今回ご質問の件では、既定値を設定したのは連結コントロール側で、また、その 参照元のコンボボックスの更新によってフィルタが適用/解除されることになります ので、既定値の設定だけ行えば問題ないはず、ということになります。 (補足欄で書かれている「名前Aのテキストボックス」については、「もうひとつの テキストボックス」が連結で、かつ、再クエリ/フィルタ適用/フィルタ解除を同時に 行うならその場で表示されますが、この条件を満たさない場合は反映されません) ※なお、No.1の回答末尾での「コントロールの再クエリ」との趣旨の記述は誤り でした(汗)。お詫びの上、上記の通り訂正させて戴きます。失礼致しました。 > 新しく作ったテキストボックスの規定値のところに=[]で括って、記載しました。 > すると、何も表示されなくなってしまいました。 この『新しく作ったテキストボックス』が、テーブルに記録された「ORDER NO」を 表示するコントロールということだとすると、恐らくですが、『ORDERNo.検索』の 方に、まだ抽出条件を入力していなかった、ということはないでしょうか。 上記の通り、連結コントロールであれば、フィルタの適用に連動してその内容が 反映されるはずですので、一度抽出条件を入力して、既定値が反映されないか 確認してみて下さい。 > このコンボボックスには、非連結と書かれています。 デザインビューでのテキストボックス内の文字は、コントロール名(プロパティシート の『名前』)ではなく、『コントロールソース』が表示されます。 その流れでいくなら、「非連結コントロールは空白でよいのでは?」と思われるかも しれませんが、テキストボックスの文字には色やフォントのサイズや種類が設定 できますので、それらの確認用として「非連結」という文字列を表示している、と いうことだと思います。 (デザインビュー上で何も文字が表示されていないと、いちいちフォームビュー (=通常の入力画面)に切り替える必要が生じてしまう、と) ・・・以上、長文失礼致しました(汗)
その他の回答 (3)
- layy
- ベストアンサー率23% (292/1222)
「ORDERNO検索」の項目は抽出する条件としての値です。テーブルの「ORDERNO」値に影響ないです。フォームの元になっているクエリのフィールド項目でなくて抽出条件にて使われていると思います。そういう使い方します。 「ORDERNO検索」の値でレコードが表示されれば更新モード、1件も表示ないとき追加モード、そんなイメージかと思います。更新用追加用とフォームを分けることもあります。既存のレコードのORDERNO最大+1が次のORDERNOになるのでそういう仕組みがどこかにあったのでは?。 ここで4と入力してもテーブルの「ORDERNO」は4になりませんが、テーブルに存在しない値であることはわかりますから、リンクしている「(ORDERNO)」の新規レコードの初期表示値にすることはできそうですが。
- DexMachina
- ベストアンサー率73% (1287/1744)
No.1です。 > このORDER NOのコンボボックスにこの画面で入力する(値が > 都度変更するから)この規定値の設定では無理なのでしょうか? 手入力で都度変更が掛かるコントロールであっても、今回のように 既定値の参照元とすることは可能です。 (例えば、帳票フォームで日付ごとに連続入力する際に、その『日付』 に対して既定値を設定することで、次の新規レコードでの『日付』の 入力を自動化する、といった場合などに使用します) > 規定値に入れたのですが、NAME???と表示されてしまいました。 この表示(正確には「#Name?」になっていたのではないかと思います)は、 指定した名前のコントロールやフィールドが見つからなかった場合のもの です。 ・・・前回の説明が不充分だったかもしれませんが(汗)、前回指定した 式での「=[(上の「2」で確認した名前)]」という中での丸括弧は、便宜 的(?)に入れたもので、実際の式には無用です。 もしもこれを入れていた場合は、削除してください(汗) それ以外のパターンとしては・・・そのコントロール自体を既定値の参照 元にした、というのも試してみましたが、それだと表示は「#エラー」となる ようで、残念ながら推測がつきません(汗) すみませんが、参照しているコントロールの名前(抽出条件を入力する 方のコントロールの『名前』欄)の値を、念のためもう一度確認してみて 下さい。
補足
大変ご丁寧、ご親切にありがとうございます。 そのコンボボックスの名前の欄を見ると、ORDERNo.検索という名前になっておりました。 それをそのままコピーし、新しく作ったテキストボックスの規定値のところに=[]で括って、記載しました。 すると、何も表示されなくなってしまいました。エラーメッセージさえ出ません。 ここでお尋ねなのですが、このコンボボックスには、非連結と書かれています。(見た目に非連結という名前になっています。ダブルクリックして名前を見ると、ORDERNo.検索という名前です) 非連結ということは、ここのフォームの元になっているテーブルとリンクしてないという意味ですよね? (フィールドリストを呼び出して中身を見ましたが、このその項目の中にORDERNo.検索はありませんでした) それだから、この=[ORDERNo.検索]は機能しないのでしょうか?それともそれも全く関係ないことでしょうか? たとえば、それが関係ないとすれば、このフォーム上に、非連結のテキストボックスをひとつつくり、名前をAとしたとします。 それでもうひとつテキストボックスを作り、規定値に=[A]としたら、このフォーム上で一つ目のテキストボックスに記入した値が(すぐその場で)表示されるのでしょうか? たびたび申し訳ございません。
- DexMachina
- ベストアンサー率73% (1287/1744)
恐らく、『(Order No)』に対して「既定値(DefaultValue)」(プロパティシートでは 『データ』タブ内にあり)が設定されていたものと思います。 コントロールの削除後、同じデータを表示するコントロールを再設置されたとの ことですが、その状態で特にエラーが発生していないということでしたら、 ・削除の前後で、コントロールの名前は変わっていない (人によっては、「テスト」フィールドを表示するコントロールに「txtテスト」と いった名前をつけることがあります。これを削除した後、再設置したものの 名前をフィールドと同じ「テスト」にすると、データは正しく表示されるものの プログラムは「txtテストが見つからない」といったエラーが発生しますが、 今回はそれがない、と) ・そのコントロールの「既定値」は、プログラムからは設定していない (もしプログラムで設定しているなら、削除したコントロールを(上記で確認した 通り、名前も含めて)元に戻したことで、従来通りの動作をするはず、と) と推測されます。 ですので、削除した後、再設置した『(ORDER NO)』に『既定値』プロパティを 設定してやれば、元の動作に戻ると思います: (・・・現状でエラーが発生していたり、「削除」というのが「そのコントロールを 指定したVBAコードのすべての行を削除」という意味でしたら、この限りでは ありませんが(汗)) 1)当該フォームをデザインビューで開く 2)フォームヘッダに設置している、抽出条件を指定するコントロール(添付画像 で最上位にある『ORDER NO』の方)をダブルクリックするなどしてプロパティ シートを表示し、『その他』タブを選択して『名前』を確認 3)削除後、元に戻した方のコントロール(同画像の『(ORDER NO)』の方)を 選択してプロパティシートを表示し、『データ』タブを選択 4)『既定値』の設定項目があるので、以下の式を入力 =[(上の「2」で確認した名前)] ※フォームヘッダに上記2で確認したコントロールが設置しているのではなく、 「メインフォーム(の『詳細』領域)で抽出条件を指定、サブフォームで抽出 結果を表示」という形式の場合は、以下の式を入力 =Forms![(メインフォーム名)]![(サブフォーム名)]![(上の「2」で確認した名前)] ※「(サブフォーム名)」は、「表示に使用しているフォームの名前」ではなく、 「メインフォームに設置したサブフォームコントロールとしての名前」です。 (サブフォームコントロールのプロパティシートで、『データ』タブの『ソース オブジェクト』として表示されるのが前者、『その他』タブの『名前』として 表示されるのが後者) 5)フォームを保存して閉じる ・・・以上です。 これで、(恐らく抽出条件を指定する『ORDER NO』の更新後イベントに設置 されているはずの)『(ORDER NO)』の再クエリ(Requery)によって、『ORDER NO』で指定した値が、自動的に『(ORDER NO)』に設定されるようになると 思います。
補足
このつたない説明で、ご理解いただきありがとうございます。 もうどなたからも回答いただけないかと思っておりました。 私もずっとフォームを眺めているうちに、規定値で解決するかな、と思ったのですが、やり方がよくわかりませんでした。 教えていただいたとおり、ORDER NOを入力するところ(コンボボックス)をダブルクリックして名前を調べました。 そしてそれを[]でとじて、規定値に入れたのですが、NAME???と表示されてしまいました。 ど素人の意見で申し訳ないのですが、これはこのORDER NOのコンボボックスにこの画面で入力する(値が都度変更するから)この規定値の設定では無理なのでしょうか? 因みに、メイン、サブフォーム形式にはなっていなくて、 ORDER NOより下の欄(商品の名前、数量等)は、 詳細 です。
お礼
回答をありがとうございました。 私の説明が下手だったため、誤解を招いたかも、と思います。 (大変申し訳ありません。私も説明や補足をしているうちに、仕組みや詳細に気づいたためです) はじめからすこし、整理させてください。 このフォームのレコードソースを調べると、このように書かれていました。 SELECT T_ORDER DETAIL.行No., T_ORDER DETAIL.ORDERNo., T_ORDER DETAIL.[REQ-DATE], T_ORDER DETAIL.[CATALOG#], T_ORDER DETAIL.DESC1, T_ORDER DETAIL.DESC2, T_ORDER DETAIL.QUANT, T_ORDER DETAIL.[U/N], T_ORDER DETAIL.[UNIT PRICE] FROM T_ORDER DETAIL ORDER BY T_ORDER DETAIL.行No.; このフォームより前に入力したフォームで、この注文の詳細を書きこんだと言いましたが、その書き込み先のテーブルがORDER DETAILという名前です。 そこをソースとして、select しているようです。 このフォームの上方にある、非連結のコンボボックスですが、 名前は、ORDERNo.検索です。 ここに、ORDERNo.を入れると、品番や数量など、先に入力したものが抽出される、と言いましたが、 このしくみは、おそらくですが、パラメータを設定し、ORDERNo.を質問してくる選択クエリを見つけましたので、 そのクエリにより、ORDERNo.を入れると、品番数量などが出るようになっているようです。 そこで、こちらの記述ですが、 >この『新しく作ったテキストボックス』が、テーブルに記録された「ORDER NO」を 表示するコントロールということだとすると、 私がやったことは、このとおりではありません。私が試したのは、ORDERNo.検索という名前のコンボボックスに入力した値が、 その場ですぐ、規定値に[ORDERNo.検索]と入れたテキストボックスに反映されるかどうかということです。 説明が大変荒っぽかったようで申し訳ありません。
補足
いつも大変丁寧に教えていただきありがとうございます。少しずつ勉強しているところです。 今回のこともちょっと理解&試してみるのに時間がかかりそうですが、また後ほど結果を報告させていただきます。