みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アクセスのフォームで抽出したデータに追加をしたい。

アクセスのフォームで抽出したデータに追加をしたい。

はじめまして。アクセスの初心者ですが、どうぞお願いいたします。
添付のシートのようなアクセスのフォーム画面があります。これの前に、別のフォームで
ORDER NO. 品番、数量、、、など、入力し終わっているので、その入力したデータがテーブルに入っています。

ここのフォームでは、ORDER NOを入力し、さきほど入力してテーブルに入っている品番数量などのデータを呼び出すようになっています。(私が作ったシステムではないのですが、抽出するためのクエリと結びついているようです)

ここの画面において、たとえば、もう一つデータを加えたいとき、(この添付の画面で言えば、4番目のデータを付け加えたいとき)どうすればいいのでしょうか。
たとえば、品番、数量などだけ入力したところで、テーブルにデータは反映されません。
1,2,3番までのデータには、さきほど申しましたように、ORDER NO.も含めて前の画面で入力済み(テーブルに入っています)から、大丈夫ですが、それ以降のデータを付け加えるとなると、ここの画面でもひとつひとつORDER NOも入力しないと、テーブルに追加されなくなります。

添付したシートの右のほうに(ORDER NO)とあると思うのですが、1,2,3までのデータには、この欄にORDER NOが表示されます。だから、更新可能です。4番以降、追加したかったら、ここにひとつひとつORDER NOを入力しなければテーブルに反映されません。つまりお尋ねは、4番、5番のデータを入力したときに、この(ORDER NO)のところに自動的にORDER NOが入力され、そしてテーブルにデータが入るようになるにはどうしたらよいのでしょうか。

というのも、以前はそうなっていたのですが、私が一度ここのフォームをいじってしまったためこのような不具合が起こってしまったのです。しかし、私がさわった(一度消してしまった)のは、この(ORDER NO)のところだけですので、ここさえ直せば、今のトラブルは解消できるものと思います。

どなたか、説明が下手で申し訳ありませんが、助けてください。

投稿日時 - 2010-09-12 12:22:05

QNo.6176782

困ってます

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

No.1,2です。

> 非連結ということは、ここのフォームの元になっているテーブルとリンクしてない
> という意味ですよね?
  (中略)
> それだから、この=[ORDERNo.検索]は機能しないのでしょうか?

既定値に設定する式の参照元には、コントロールが連結か非連結かに関係なく、
指定することができます。
(なお、連結/非連結については、上記の認識でOKです)

但し、既定値を設定したのが連結コントロールであれば、「フォームの再クエリ」や
「フィルタの適用」または「解除」が行われると同時に、その内容が反映されますが、
非連結コントロールだった場合はそれらの操作では反映されず、フォームを開いた
とき以外で既定値を変更するには、VBAなどで式自体を再度設定してやる必要が
あります。

今回ご質問の件では、既定値を設定したのは連結コントロール側で、また、その
参照元のコンボボックスの更新によってフィルタが適用/解除されることになります
ので、既定値の設定だけ行えば問題ないはず、ということになります。
(補足欄で書かれている「名前Aのテキストボックス」については、「もうひとつの
 テキストボックス」が連結で、かつ、再クエリ/フィルタ適用/フィルタ解除を同時に
 行うならその場で表示されますが、この条件を満たさない場合は反映されません)

※なお、No.1の回答末尾での「コントロールの再クエリ」との趣旨の記述は誤り
  でした(汗)。お詫びの上、上記の通り訂正させて戴きます。失礼致しました。


> 新しく作ったテキストボックスの規定値のところに=[]で括って、記載しました。
> すると、何も表示されなくなってしまいました。

この『新しく作ったテキストボックス』が、テーブルに記録された「ORDER NO」を
表示するコントロールということだとすると、恐らくですが、『ORDERNo.検索』の
方に、まだ抽出条件を入力していなかった、ということはないでしょうか。
上記の通り、連結コントロールであれば、フィルタの適用に連動してその内容が
反映されるはずですので、一度抽出条件を入力して、既定値が反映されないか
確認してみて下さい。


> このコンボボックスには、非連結と書かれています。

デザインビューでのテキストボックス内の文字は、コントロール名(プロパティシート
の『名前』)ではなく、『コントロールソース』が表示されます。

その流れでいくなら、「非連結コントロールは空白でよいのでは?」と思われるかも
しれませんが、テキストボックスの文字には色やフォントのサイズや種類が設定
できますので、それらの確認用として「非連結」という文字列を表示している、と
いうことだと思います。
(デザインビュー上で何も文字が表示されていないと、いちいちフォームビュー
 (=通常の入力画面)に切り替える必要が生じてしまう、と)


・・・以上、長文失礼致しました(汗)

投稿日時 - 2010-09-16 22:06:01

補足

いつも大変丁寧に教えていただきありがとうございます。少しずつ勉強しているところです。
今回のこともちょっと理解&試してみるのに時間がかかりそうですが、また後ほど結果を報告させていただきます。

投稿日時 - 2010-09-17 12:06:53

お礼

回答をありがとうございました。
私の説明が下手だったため、誤解を招いたかも、と思います。
(大変申し訳ありません。私も説明や補足をしているうちに、仕組みや詳細に気づいたためです)
はじめからすこし、整理させてください。

このフォームのレコードソースを調べると、このように書かれていました。

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.検索]と入れたテキストボックスに反映されるかどうかということです。

説明が大変荒っぽかったようで申し訳ありません。

投稿日時 - 2010-09-22 13:45:45

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

「ORDERNO検索」の項目は抽出する条件としての値です。テーブルの「ORDERNO」値に影響ないです。フォームの元になっているクエリのフィールド項目でなくて抽出条件にて使われていると思います。そういう使い方します。

「ORDERNO検索」の値でレコードが表示されれば更新モード、1件も表示ないとき追加モード、そんなイメージかと思います。更新用追加用とフォームを分けることもあります。既存のレコードのORDERNO最大+1が次のORDERNOになるのでそういう仕組みがどこかにあったのでは?。

ここで4と入力してもテーブルの「ORDERNO」は4になりませんが、テーブルに存在しない値であることはわかりますから、リンクしている「(ORDERNO)」の新規レコードの初期表示値にすることはできそうですが。

投稿日時 - 2010-09-16 11:38:47

ANo.2

No.1です。

> このORDER NOのコンボボックスにこの画面で入力する(値が
> 都度変更するから)この規定値の設定では無理なのでしょうか?

手入力で都度変更が掛かるコントロールであっても、今回のように
既定値の参照元とすることは可能です。
(例えば、帳票フォームで日付ごとに連続入力する際に、その『日付』
 に対して既定値を設定することで、次の新規レコードでの『日付』の
 入力を自動化する、といった場合などに使用します)

> 規定値に入れたのですが、NAME???と表示されてしまいました。

この表示(正確には「#Name?」になっていたのではないかと思います)は、
指定した名前のコントロールやフィールドが見つからなかった場合のもの
です。

・・・前回の説明が不充分だったかもしれませんが(汗)、前回指定した
式での「=[(上の「2」で確認した名前)]」という中での丸括弧は、便宜
的(?)に入れたもので、実際の式には無用です。
もしもこれを入れていた場合は、削除してください(汗)

それ以外のパターンとしては・・・そのコントロール自体を既定値の参照
元にした、というのも試してみましたが、それだと表示は「#エラー」となる
ようで、残念ながら推測がつきません(汗)
すみませんが、参照しているコントロールの名前(抽出条件を入力する
方のコントロールの『名前』欄)の値を、念のためもう一度確認してみて
下さい。

投稿日時 - 2010-09-15 22:08:04

補足

大変ご丁寧、ご親切にありがとうございます。
そのコンボボックスの名前の欄を見ると、ORDERNo.検索という名前になっておりました。
それをそのままコピーし、新しく作ったテキストボックスの規定値のところに=[]で括って、記載しました。
すると、何も表示されなくなってしまいました。エラーメッセージさえ出ません。

ここでお尋ねなのですが、このコンボボックスには、非連結と書かれています。(見た目に非連結という名前になっています。ダブルクリックして名前を見ると、ORDERNo.検索という名前です)
非連結ということは、ここのフォームの元になっているテーブルとリンクしてないという意味ですよね?
(フィールドリストを呼び出して中身を見ましたが、このその項目の中にORDERNo.検索はありませんでした)

それだから、この=[ORDERNo.検索]は機能しないのでしょうか?それともそれも全く関係ないことでしょうか?

たとえば、それが関係ないとすれば、このフォーム上に、非連結のテキストボックスをひとつつくり、名前をAとしたとします。
それでもうひとつテキストボックスを作り、規定値に=[A]としたら、このフォーム上で一つ目のテキストボックスに記入した値が(すぐその場で)表示されるのでしょうか?

たびたび申し訳ございません。

投稿日時 - 2010-09-16 09:58:12

ANo.1

恐らく、『(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)』に設定されるようになると
思います。

投稿日時 - 2010-09-15 13:34:24

補足

このつたない説明で、ご理解いただきありがとうございます。
もうどなたからも回答いただけないかと思っておりました。

私もずっとフォームを眺めているうちに、規定値で解決するかな、と思ったのですが、やり方がよくわかりませんでした。
教えていただいたとおり、ORDER NOを入力するところ(コンボボックス)をダブルクリックして名前を調べました。
そしてそれを[]でとじて、規定値に入れたのですが、NAME???と表示されてしまいました。

ど素人の意見で申し訳ないのですが、これはこのORDER NOのコンボボックスにこの画面で入力する(値が都度変更するから)この規定値の設定では無理なのでしょうか?

因みに、メイン、サブフォーム形式にはなっていなくて、
ORDER NOより下の欄(商品の名前、数量等)は、 詳細 です。

投稿日時 - 2010-09-15 15:52:02

あなたにオススメの質問