Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Access 2016)
レボートで計算されない
投稿日時: 20/10/09 12:42:56
投稿者: d193168

テーブルに
フィールド:初回 体重
データ型:数値型
フィールドサイズ:単精度浮動小数点
同じテーブルに
フィールド:最終 体重
データ型:数値型
フィールドサイズ:単精度浮動小数点
が有ります。
クエリを介しレポートを作成しコントロールソースに
=[初回 体重]-[最終 体重]
入力ましたが計算されませんでした。
デザインビューで気付いたのですが
(かなり説明しにくいのですが、
レポートでの計算式を入力したテキストのプロパティシートのコントロールソースで
=[初回 体重]-[最終 体重]の=[初回 ]-[最終 体重]とすると初回の部分がつく候補の一覧がプルダウンメニューとなってでます。そこのメニューの右側を見て気付いたのです。)そこには
[初回 体重]はレコードソースの列
[最終 体重]はTextBox
となっていました。アイコンも違っていました。
他作成したレコードソースの列同士ならばけいさんされました。
どうすれば[最終 体重]をレコードソースの列に変更できますか?テーブルをコピーしてフィールド名を直してもうまく行きません。
 

回答
投稿日時: 20/10/09 15:09:05
投稿者: Suzu

引用:
[最終 体重]はTextBox
となっていました。アイコンも違っていました。
他作成したレコードソースの列同士ならばけいさんされました。
どうすれば[最終 体重]をレコードソースの列に変更できますか?テーブルをコピーしてフィールド名を直してもうまく行きません。

 
レポートに、「最終 体重」と言う名称のコントロールがありませんか?
 
そのコントロール名を変更しましょう。
 
 
別件にはなりますが
フィールド名に「スペース」を含めるのは止めておいたほうが良いです。
スペースの部分を「_(アンダーバー)」に置き換える等の変更をしておいた方が良いです。
誤動作の原因のひとつとなりえます。

投稿日時: 20/10/09 16:57:55
投稿者: d193168

引用:

レポートに、「最終 体重」と言う名称のコントロールがありませんか?

 
確かに有ります。
まさに隣が「最終 体重」です。
これが原因かもですか。
しかし他に同じように有るテキストは「レコードソースの列」になっています。身長などたくさん使用していますが、レコードソースの列です。
他のテキストを見ると
レコードソースの列だったりTextBoxだったりしていますが。
 
名前を変えても(「最終_体重1」など)またレポートで同じ名前を使用して計算しなければなりません(BMIなど計算します)。
その場合どの様に行えば良いのですか?
名前を変えるとレコードソースの列になったりするのでしょうか?

回答
投稿日時: 20/10/12 09:54:08
投稿者: Suzu

引用:
しかし他に同じように有るテキストは「レコードソースの列」になっています。身長などたくさん使用していますが、レコードソースの列です。
他のテキストを見ると
レコードソースの列だったりTextBoxだったりしていますが。

 
コントロールの「名称」と、コントロールソースとなっている「フィールド名」と同じになってしまいます。レポート作成ウィザードにて作成した場合の弊害です。
 
 
[テーブル1]
フィールド1   フィールド2
やまだ    山田
があるとき、
そのテーブルを元にウィザードにて新規レポートを作成します。
 
新規レポートに配置された
「フィールド1」 を表示するテキストボックス の名称を 【フィールド1】から、【フィールド3】に変えます。(コントロールソースは「フィールド1」のまま)
 
次に、新規テキストボックスコントロールを配置し、
 名称を「フィールド1」
 コントロールソースを【フィールド2】に設定
 
更に新規コントロールを配置し
 コントロールソースに【=[フィールド1]】に設定
 (コントロールの名称は何でも良いです説明の為にここでは「テキスト1」とします)
 
これをレポートビューにて開くと 「テキスト1」には何が表示されるでしょうか?
テーブルの「フィールド1」の値ではなく
レポートに配置されたコントロール「フィールド1」の値つまりテーブルの「フィールド2」の値が表示されてしまいます。
 
コントロールソースを指定する右側の▼から選択する際にはレコードソースのフィールドを参照しますが
コントロールソースに、「=」を入力するとコントロールから参照する様になります。
(コントロールの名称として存在しなければレコードソースから参照します)
 
なので、コントロールソースの先頭に「=」が入るかどうかで
引用:
レコードソースの列だったりTextBoxだったり
が発生しているのではありませんか?
 
 
引用:
名前を変えても(「最終_体重1」など)またレポートで同じ名前を使用して計算しなければなりません(BMIなど計算します)。
その場合どの様に行えば良いのですか?
名前を変えるとレコードソースの列になったりするのでしょうか?

 
Access2016は判りませんがAccess2013 の場合
「ファイル」-「オプション」-「現在のデータベース」の名前の自動修正オプション
「名前の自動修正情報をトラックする」「名前の自動修正を行う」のチェックの状態で動作が変わります
チェックが入っている場合、コントロール又はフィールドの名称を変更した場合
そのコントロール/フィールドを参照するコントロールソースも変更されます。
 
チェックが入っていない場合、コントロール又はフィールドの名称を変更しても
そのコントロール/フィールドを参照するコントロールソースはそのままです。
 
 
なので、今回の修正であれば、
チェックを外し、問題の発生するコントロールの名称を変更しましょう。
 
 
それよりも効果的なのは、演算コントロールにて計算するのではなく
クエリの演算フィールドを使用しクエリにて演算させます。
その方が、処理も早くなるはずです。

投稿日時: 20/10/13 09:21:14
投稿者: d193168

う〜ん、難しいですね。こんがらがっています。
 

引用:
コントロールソースを指定する右側の▼から選択する際にはレコードソースのフィールドを参照しますが
コントロールソースに、「=」を入力するとコントロールから参照する様になります。
(コントロールの名称として存在しなければレコードソースから参照します)

 「=」をいれても「[]」で囲まれたフィールドはレコードソースを参照してほしいです。
 
引用:
なので、コントロールソースの先頭に「=」が入るかどうかで
レコードソースの列だったりTextBoxだったり
が発生しているのではありませんか?

作成しているレポートにはフィールドが多く、同じものを何度も利用しているので現状はそのようになってしまっていました。
フィールド名を変更し、空欄にはアンダーバーを入力して新規計算のみ実施したところうまく計算できました。後でわかりやすいように同じコントロール名をつけ使用しましたがこれが問題なのですね。
 
引用:
それよりも効果的なのは、演算コントロールにて計算するのではなく
クエリの演算フィールドを使用しクエリにて演算させます。
その方が、処理も早くなるはずです。

そうですね、その方がスムースにいきそうですね。
ただ今回のレポートはウィザードを使用せずに作成していました。
 
今回も助けていただきました。ありがとうございます。
「=」をつけるとコントロールから参照してしまうのは何かメリットはあるのですかね。
初心者はこんがらがるので困ります。