- ベストアンサー
Access2000 #Name?エラーを判断する方法とは?
- Access 2000のフォームで表示される#Name?エラー(コントロールソースに指定された名前が見つからない)を判断する方法を教えてください。
- フォームのテキストボックスに#Name?が表示されると、フォームフッターでの計算ができないため、何らかの手段で空白や0を表示したいです。
- フォームのレコードソースにはSQLが入っており、TRANSFORMとPIVOTを使用しています。売上実績の0の月や発売前の月についてのレコードは追加していません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
なら TRANSFORM Sum([売上実績].[金額]) AS 金額 SELECT [売上実績].[商品コード], [商品マスタ].[商品名] FROM 商品別予算 INNER JOIN 商品マスタ ON [売上実績].[商品コード]=[商品マスタ].[商品コード] GROUP BY [売上実績].[商品コード], [商品マスタ].[商品名] PIVOT [売上実績].[月]; In (1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月); とか TRANSFORM Nz(Sum([売上実績].[金額]),0) AS 金額 SELECT [売上実績].[商品コード], [商品マスタ].[商品名] FROM 商品別予算 INNER JOIN 商品マスタ ON [売上実績].[商品コード]=[商品マスタ].[商品コード] GROUP BY [売上実績].[商品コード], [商品マスタ].[商品名] PIVOT [売上実績].[月]; In (1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月); だと思います。 勘違いしているかも?
その他の回答 (1)
- nicotinism
- ベストアンサー率70% (1019/1452)
で、#Name? は何処に出ているのでしょう? PIVOT [売上実績].[月]; In (1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月); では外していますよね (^^ゞ #Name? が出ても計算できるようにするのではなく #Name? を出さないように作ってゆくのが肝要かと思います。
お礼
早速の回答ありがとうございます。 >で、#Name? は何処に出ているのでしょう? テーブル[売上実績]において、商品によってレコードがない月が存在し、クロスクエリの結果、1月から12月までの列が全て揃わないことが原因です。 つまり、例えば7月の売上実績表示用のテキストボックスのコントロールソースに 7 と入っていても、クエリの結果の列に7(7月)がないことがあるからです。 それでは、テーブル[売上実績]に全ての商品コードに対して、1月から12月まで12レコードを必ず発生すれば良い、ということになります。そうすれば、当然解決します。しかしながら、テーブル[売上実績]に必ず12レコード存在させるように考えなければなりません。ある商品の発売日が12月D日だった場合、前もって1月から11月までその商品のレコードを追加しておくか(ところが商品コードが直前で決定することも少なくないので実際には不可)、12月の実績を追加する際に、過去1年間のレコードを0で全て追加しなければいけないことになります。生産終了後もその年は、12月までずっとレコードを追加しなければなりません。 また、売上がない月にレコードを発生させないだけでかなりのデータサイズの縮小化ができているのですが、それも元の状態になってしまいます。
お礼
回答ありがとうございます。 自宅にAccess 2000の環境がないので、明日会社でやってみます。結果をまたコメントさせていただきます。
補足
解決しました。ありがとうございました。 フォームのレコードソースには以下のSQLを入れました。 TRANSFORM Sum(売上実績.金額) AS 金額 SELECT 売上実績.商品コード, 商品マスタ.商品名 FROM 売上実績 INNER JOIN 商品マスタ ON 売上実績.商品コード = 商品マスタ.商品コード GROUP BY 売上実績.商品コード, 商品マスタ.商品名 PIVOT 売上実績.月 In (1,2,3,4,5,6,7,8,9,10,11,12); SQLの結果、テーブル[売上実績]のレコードの有無に関わらず、1月から12月までの列が全て発生します。 また、フォーム上の各月の金額を表示するテキストボックスのコントロールソースには以下のような式を入れました。(7月の場合) =IIf(IsNull([7]),0,[7]) これにより、7月がNull(テーブル[売上実績]には7月のレコードが存在しない)の場合は、0を表示することができました。 SQLを理解していないので(クエリビルダでクエリを作成し、SQLをコピーしています)、今回のような壁に突き当たりましたが、nicotinismさんのおかげで解決できました。本当にありがとうございました。