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

解決済みの質問

サブフォームの値をメインFのテーブルへ&残数計算

アクセスについて二つ質問があります。

1. クエリを元に作ったサブフォーム内に、レイヤー数、パターン数、合計というフィールドがあります。
レイヤー数xパターン数=合計という計算になっています。
サブフォーム内の”合計”を全て足した数字を、メインフォームの”合計オーダー数”というフィールドに代入し、またこの値をテーブルに入れたいと考えています。

サブフォームのフッターに、合計を全て足した数字を計算するように、コントロールを作りました。
メインフォームの元のテーブルには、合計オーダー数というフィールドがあり、そこにこの数字を格納したいのですが、サブフォームのフッターで出した値を、”合計オーダー数フィールド”へ表示することが出来ても、テーブルには格納されません。(手入力なら入ります。)
値の代入マクロというのがあるようなのですが、これがそれにあたりますでしょうか?
お教え頂ければ幸いです。


2. クエリにて残数を計算したい

外注に出した数と仕上がってきた数から、残数を出したいと思っています。
カッティングIDひとつに対して、カラーIDがいくつかある状態です。
外注に出すときは、カッティングID別に出しますが、あがってくる時は、ばらばらにあがってきます。
例えば、赤を40、青を20、緑を20発注する場合、仕上がってくる時は、
赤10、青10、緑5、といった様にあがってきます。

これを色別に発注した数(合計)と(色枚完了数)から、色別の残数(未完了数)を出したいのですが、
どうしたらよいでしょうか?
まずは、二つのテーブルからクエリで色別の発注数、と色別の完了数を出すところまではしました。


T-色別カッティング詳細
・ID(オート番号、主キー)
・カッティングID  
・カラーID  
・枚数   
・パターン数

Q-色別外注発注数 (上記T-色別カッティング詳細を元に)
・カッティングID
・カラーID
・商品名
・レイヤー数
・パターン数
・合計(レイヤー数xパターン数)


T-完了詳細
・完了ID
・カッティングID
・カラーID
・会社ID
・完了日
・完了数


Q-完了数 (上記T-完了詳細を元に)
・カッティングID
・カラーID
・色枚完了数合計(SumOf完了数)


お手数ですが、ご教授頂けますと幸いです。
宜しくお願いいたします

投稿日時 - 2013-06-09 21:15:48

QNo.8126825

困ってます

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

>希望と致しましては、ボタン一つで値の表示・テーブル
>への格納が出来ればと思っております。

このままでは、親フォーム以外のどれかの
コントロール(たとえばサブフォームの
フィールドなど)をクリックしたり、レコードを
移動したりしないとレコードは確定しませんね。
では、以下のように一行追加したものを試してみてください。


Private Sub コマンド5_Click()
  Me!合計オーダー数 = Me!埋め込み0!tx総計
  DoCmd.RunCommand acCmdSaveRecord
End Sub


DoCmd.RunCommand acCmdSaveRecord
によって、現在のレコードを確定させます。
この場合は親フォームのレコードソース
が対象になります。

引き続き(2)については確認してみます。

投稿日時 - 2013-06-13 00:46:10

補足

ご丁寧に誠に有難うございました。
お蔭様で、テーブルにも同時に格納することができました。
(2)につきましても、私も引き続き色々と試しております。
大変お手数ではございますが、お手すきの際に宜しくお願いいたします。

投稿日時 - 2013-06-13 17:27:55

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

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

回答(3)

ANo.2

No1の回答に勘違いがあったので(多分)、
以下を試してみてください。

Private Sub コマンド5_Click()
  Me!合計オーダー数 = Me!埋め込み0!tx総計
End Sub

「埋め込み0」についての説明はNo1と同じです。

投稿日時 - 2013-06-12 14:44:07

補足

pitoin654様
再度ご返信有難うございます。お蔭様で、合計オーダー数をコマンドボタンで表示することは出来ましたが、次のレコードに行かないと値がテーブルには格納されないようでした。

希望と致しましては、ボタン一つで値の表示・テーブルへの格納が出来ればと思っております。
と申しますのも、値を確定後、印刷ボタンにてフォームに表示中データのレポートを印刷するのですが、テーブルに値が格納されないと、合計オーダー数の部分が空白となってしまいます。次のリコードに進んで、戻れば格納されているのですが、そうせずとも出来るでしょうか?
度々ご面倒をお掛け致しますが、何卒宜しくお願いいたします。

投稿日時 - 2013-06-12 22:40:30

ANo.1

たぶん回答がつかないのは、(1)はともかく
(2)の部分にわかりにくいところがあるからだと
思いますが。(1)もどちらかというと何となく
不安なところがありますが。

(1)
たとえば、メインフォームのレコードソースが、

ID   名前       合計オーダー数
1    スカート
2    手袋
3    ズボン
4    セーター

のようになっているものとします。
また、サブフォームにはレイヤー数、パターン数、合計以外にIDという
フィールドがあるものとします。このIDはメインフォームのIDと
連動するフィールドです。もし、メインフォームのIDとサブフォームの
IDのようにリンクして連動するフィールドがないのであれば、
メインフォームとサブフォームのレコードソースをすべて表示
しないと難しいことにはなりますが。(そのときに回答が可能かは
何とも言えませんが)


メインフォームにボタンを一つ設定し、そのボタンのクリックイベントで、

Private Sub コマンド5_Click()
  Dim strSQL As String

  strSQL = "UPDATE テーブル1 SET テーブル1.合計オーダー数 =" & Me!埋め込み0!tx総計 & " WHERE ([テーブル1].[ID]=" & Me!ID & ")"

  DoCmd.RunSQL strSQL
  Me.Refresh
End Sub

なお、「埋め込み0」というのはメインフォームのデザインビューのとき、
サブフォームを表示するために設定するコントロールで、サブフォーム
そのものではありません。もしサブフォームと同じ名前にしているならば
それでも構いませんが、初期値は「埋め込み0」というような名前に
なっています。
また、コード中のテーブル名はメインフォームのレコードソースです。
実際に合わせて名前を変更してください。


(2)
問題の(2)についてですが。質問には、

T-色別カッティング詳細
・ID(オート番号、主キー)
・カッティングID  
・カラーID  
・枚数   
・パターン数

Q-色別外注発注数 (上記T-色別カッティング詳細を元に)
・カッティングID
・カラーID
・商品名
・レイヤー数
・パターン数
・合計(レイヤー数xパターン数)

とありますが、「Q-色別外注発注数」の

・商品名
・レイヤー数

はどこからきたのでしょうか。もしかしたら
T-商品のようなものがあって、そこに登録されている
のでしょうか。それならば、「T-色別カッティング詳細」
にリレーションをとる何か、たとえば商品IDのような
ものがないと、不必要なデータが「Q-色別外注発注数」
に出てくるのでは、と思います。

投稿日時 - 2013-06-12 10:48:34

補足

piroin 654様

ご返信有難うございます。説明不足でわかりづらいところがあり申し訳ございません。

1. メインフォームとサブフォームは、NoPotonganというIDでリンクされています。アドバイスを元に、コードを貼り付けてみましたが、コンパイルエラーのExpected: End of Statementというのが出てきてしまいました。

T_SuratPotongBaseInfo (メインフォームの元のテーブル名)
TotalOrderQtty (メインフォーム元のテーブルのフィールド名、全ての合計数を格納したいフィールド)
F_SuratPotongDetail (埋め込みサブフォームのコントロール名、サブフォーム名と同じ名前にしてあります)
OrderQtty_Total(サブフォームのフッターに作った合計を全て足した数字を計算するコントロール名)

申し訳ございませんが、ご確認いただけますでしょうか?

Private Sub cmd_MasukDataIni_Click()
Dim strSQL As String
strSQL = "UPDATE T_SuratPotongBaseInfo SET T_SuratPotongBaseInfo.TotalOrderQtty =" & Me!F_SuratPotongDetail!txOrderQtty_Total & " WHERE ([T_SuratPotongBaseInfo].[NoPotongan]=" & Me! NoPotongan & ")"
DoCmd.RunSQL strSQL
Me.Refresh
End Sub

2. こちらも説明不足で申し訳ございません。

T_発注情報
・カッティングID(主キー)
・裁断日
・合計オーダー数
・商品名
・生地名
・サイズ

T_色別カッティング詳細
・ID(オート番号、主キー)
・カッティングID  
・カラーID  
・レイヤー数   
・パターン数

Q_色別外注発注数 
・カッティングID
・カラーID
・商品名
・レイヤー数
・パターン数
・合計(レイヤー数xパターン数)

例)
Q_色別外注発注数 合計外注発注数は、(枚数xパターン数)
カッティングID 001、 カラーID 1(赤)、合計外注発注数 100
カッティングID 001、 カラーID 2(青)、合計外注発注数 100
カッティングID 001、 カラーID 3(緑)、合計外注発注数 100
カッティングID 002、 カラーID 1(赤)、合計外注発注数 200
カッティングID 002、 カラーID 2(青)、合計外注発注数 200

T_完了詳細には、
カッティングID 001、カラーID 1(赤)、 完了日5/6、 完了数 10
カッティングID 001、カラーID 1(赤)、 完了日5/7、 完了数 20
カッティングID 001、カラーID 2(青)、 完了日5/6、 完了数 10
カッティングID 001、カラーID 2(青)、 完了日5/7、 完了数 20
カッティングID 002、カラーID 1(赤)、 完了日5/6、 完了数 20
カッティングID 002、カラーID 1(赤)、 完了日5/7、 完了数 5
カッティングID 002、カラーID 2(青)、 完了日5/7、 完了数 10

Q_完了数は、
カッティングID 001、 カラーID 1(赤)、合計完了数 30
カッティングID 001、 カラーID 2(青)、合計完了数 30
カッティングID 002、 カラーID 1(赤)、合計完了数 25
カッティングID 002、 カラーID 2(青)、合計完了数 10

今回計算したいと思っているのは、【合計外注発注数】から、色毎の完了数をまとめた【Q-完了数の合計完了数】です。

カッティングID 001、 カラーID 1(赤)、合計外注発注数 100-合計完了数 30=70
カッティングID 001、 カラーID 2(青)、合計外注発注数 100-合計完了数 30=70
カッティングID 001、 カラーID 3(緑)、合計外注発注数 100-合計完了数 0=100
カッティングID 002、 カラーID 1(赤)、合計外注発注数 200-合計完了数 25=175
カッティングID 002、 カラーID 2(青)、合計外注発注数 200-合計完了数 10=190 

Q_色別外注発注数 とQ_完了数から選択クエリを作り、カッティングIDとカラーIDを結合し、
[Q_色別外注発注数 ]![合計発注数] - [Q_完了数]![合計完了数]をビルドで作成したところ、
上記の カッティングID 001、 カラーID 3(緑)、合計外注発注数 100-合計完了数 0=100 以外は、
値が出るのですが、完了数が入っていないものはNull値の為か、値が出てきません。
Nz関数にて色々と試みているのですが、何分知識不足のため、どうNz関数を式に当てはめてよいか悩んでおります。

お手数をお掛け致しますが、ご教授頂けますと幸いです。
何卒宜しくお願いいたします。

投稿日時 - 2013-06-12 15:26:39

あなたにオススメの質問