- ベストアンサー
Accessのレポートのデータ出力について
お世話になっております。 ひとつご教授ください。 それは、条件によって参照するテーブルのデータを見にいかせる方法です。 マスターテーブルと、材料費テーブル、人件費テーブルとあって、これらのテーブルの構造は以下のようになっています。 <マスターテーブル> Cost_ID G_ID <材料費テーブル> Cost_ID(規定値=1) G_ID(材料の項目によって1~番号を振ってある) M_Name(G_IDに対応する材料費名) <人件費テーブル> Cost_ID(規定値=2) G_ID(人件の項目によって1~番号を振ってある) P_Name(G_IDに対応する人件費名) という構造にしており、マスターテーブルには、材料費ならCost_IDには「1」が代入され、それに対応する項目の番号をデータとして格納していっています。(人件費についても同様) そこで、レポートにおいて、Cost_IDをグループ化させて、出力しているのですが、材料費・人件費の項目ID(G_ID)を、Cost_IDを元に区別させ、それに対応する項目ID(G_ID)を元に項目名を表示させようと思っています。 例えば、SelectCaseを使えばいいのかなと予想はつくのでしょうが、可能なのでしょうか?可能な場合どのようにしたらよろしいのでしょうか?よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。maruru01です。 レポートのレコードソースはマスタテーブルにして、詳細のFormatイベントに記述する方法。 (エラートラップはしてない。) Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) Select Case Me!txtCostID Case 1 Me!txtName = DLookup("M_Name", "材料費テーブル", "G_ID = " & CLng(Me!txtGID)) Case 1 Me!txtName = DLookup("P_Name", "人件費テーブル", "G_ID = " & CLng(Me!txtGID)) End Select End Sub ところで、材料費テーブルと人件費テーブルにはCost_IDというフィールドがあるのでしょうか。 もしそうなら、すでにテーブルを別にしてあるのでそんなフィールドはいらないと思いますが。 (2つのテーブルを1つにするなら、費用区分として必要ですが。)
その他の回答 (2)
- maruru01
- ベストアンサー率51% (1179/2272)
No.2の修正です。 Caseの値が両方とも1になっているので、下の方を2にしておいて下さい。
お礼
すみません。 できました。 簡単なミスでして、とても恥ずかしいです 汗 これからも、何かありましたらよろしくお願いいたします。
補足
何度か試してみたのですが、うまく行きません 汗 構造としては、Cost_IDをヘッダーとして、その詳細として、G_IDを設置しています。Cost_IDをグループとしているので右のような構造にしているのですが、教えていただいたソースでも大丈夫なのでしょうか? エラーの内容としては、「オブジェクトに値を代入できません」というエラーがでます。 何度もすみませんが、よろしくお願いいたします。
- osamuy
- ベストアンサー率42% (1231/2878)
レポートのレコードソースを select TZ.* from マスターテーブル TMA inner join 材料費テーブル TZ on TMA.Cost_ID=TZ.Cost_ID and TMA.G_ID=TZ.G_ID union select TJ.* from マスターテーブル TMA inner join 人件費テーブル TJ on TMA.Cost_ID=TJ.Cost_ID and TMA.G_ID=TJ.G_ID; ――みたいなのにして、出力するとか。 クエリの列名をそろえたり、レポートの詳細部のformat時に、連結フィールドの可視属性を切り替えたり、などを行う必要があるかも。
補足
人件費テーブルと、材料費テーブルにはそれぞれCost_IDというフィールドを設けています。 人件費テーブルには規定値を2とし、材料費テーブルには、規定値1を入れて、マスターテーブルにこれはどの費用かを認識させるためにです。 G_IDと、M_IDは、人件費・材料費の中のさらに細かい項目と言う意味でフィールドを設けてます。 さっそく、頂いたソースをもとに組んでみます。 また、不明な点がでましたらよろしくお願いいたします。