Access (一般機能)

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

 
(Windows 10 Pro : Access 2016)
パフォーマンスの最適化で表示されるメッセージ
投稿日時: 21/03/23 10:36:40
投稿者: かず

ACCESSのバージョンは2019です。
 
パフォーマンスの最適化というのを実行したところ
『このプロパティの設定値が長すぎます。』とポップアップ表示されます。
これは、どういう意味のメッセージなのでしょうか?
また、これを表示させない為の解決策はあるのでしょうか。
 
やった事の手順は
 
データベースツール
→パフォーマンスの最適化
→フォームタブ
→全て選択
→OK押して実行
 
すると『このプロパティの設定値が長すぎます。』とポップアップ表示されます。
それと同時に、該当のSQL文が小さなポップアップで少しだけ表示されています。
 
表示された内容から、対象のフォームとクエリを使っているコンボボックスを特定できましたので、
 
フォームのデザイン画面
→フォーム上のコンボボックス右クリック
→プロパティ→値集合ソース
→…を左クリック
 
するとクエリのデザイン画面が表示されます。
右クリック→SQLビュークリック→SQLが表示されます。
 
webサイトを使ってこのSQLの文字数を調べたところ695文字で1382バイトです。
 
毎日問題無く動作しているのですがちょっと気になっています。

回答
投稿日時: 21/03/23 13:54:26
投稿者: sk

引用:
データベースツール
→パフォーマンスの最適化
→フォームタブ
→全て選択
→OK押して実行
  
すると『このプロパティの設定値が長すぎます。』とポップアップ表示されます。
それと同時に、該当のSQL文が小さなポップアップで少しだけ表示されています。

パフォーマンス最適化ツールによる解析結果としてではなく、
解析結果が表示されるより前にエラーメッセージとして
表示されているのであれば、基本的にはパフォーマンス
最適化ツールの内部処理(つまりプログラム)において、
何らかの問題により実行時エラーが発生しているのだと思われます。
 
引用:
表示された内容から、対象のフォームとクエリを使っている
コンボボックスを特定できましたので、
  
フォームのデザイン画面
→フォーム上のコンボボックス右クリック
→プロパティ→値集合ソース
→…を左クリック
  
するとクエリのデザイン画面が表示されます。
右クリック→SQLビュークリック→SQLが表示されます。
  
webサイトを使ってこのSQLの文字数を調べたところ695文字で1382バイトです。

実際の SQL 文を見ないことには何とも申し上げられませんが
(そもそも本当にその SQL 文のせいか否かも断定しかねる)、
少なくともその SQL 文の文字数に関しては問題ないでしょう。
([値集合ソース]プロパティにおける SQL 文の文字数上限は 32750 文字)
 
引用:
毎日問題無く動作しているのですがちょっと気になっています。

今のところは「あくまでパフォーマンス最適化ツール自体の
問題なので、あまり気にしなくてもよいのではないか」という印象。

回答
投稿日時: 21/03/23 14:10:41
投稿者: Suzu

メッセージ「このプロパティの設定値が長すぎます。」は、
お察しの通り、オブジェクトに指定されているプロパティーの値が制限範囲を超えていると言う意味です。
 
今回のメッセージが 対象のフォームとクエリを使っているコンボボックス なのであれば
 
https://support.microsoft.com/ja-jp/office/access-%e3%81%ae%e4%bb%95%e6%a7%98-0cf3c66f-9cf2-4e32-9568-98c1025bb47c?ocmsassetid=ha010341462&correlationid=72891b05-11f6-4cc3-932f-8b8935babadf&ui=ja-jp&rs=ja-jp&ad=jp
 
Access の仕様
Access for Microsoft 365 Access 2019 Access 2016 Access 2013 Access 2010 Access 2007
 
フォームおよびレポート

引用:
フォーム、レポート、またはコントロールの [Recordsource] プロパティまたは [Rowsource] プロパティとして設定される SQL ステートメントの文字数
 
32,750

 
これが、制限になるはずです。
 
でも、メッセージが表示されてしまうが、なぜか?となると思います。
 
ここからは推測が入ります。
 
推測.1
 Accessのファイル形式として、mdb という形式があります。
 これは、古い形式であり、仕様として、現在の仕様と違う点が多くあり、
 値集合ソース[Rowsource]プロパティーも 先に述べた 文字数より小さい値であり、
 かつ、文字数の数え方も違いました。(すいません詳しくは覚えていません)
 
 最適化ツール は、その古い仕様の頃から存在しており、
 現在もmdbがありますので、仕様的に昔の数値でメッセージが出るようになっている。
 
 
推測.2
 最適化の機能の中で、SQLとして成立するか を確認していると思われます。
 つまり、SQL の文字列で、省略されている部分や、エイリアス名を使用している部分に対し
 補完し、丁寧な 文字列にして確認を行っているのかもしれません。
 
 SELECT Field_A FROM Table1
   ↓
 SELECT [Table1].[Field_A] FROM [Table1]
 の様に内部変換を行ってから確認をしている可能性がある。
 
 
 
また、SQL に、フォーム上のコントロールを参照したりする
パラメーターが含まれている場合、SQLとして正しくとも
検証の段階でエラーになる事がありました。
 
 
何にしても、SQLの内容も判りませんし、最適化の内部ロジックも判らないので
推測の域を出ませんが。
 
 
対策としては、
値集合ソースのSQLをクエリとして保存し、値集合ソースには、そのクエリを指定する事で
回避できるはずです。
引用:
クエリ SQL ステートメントの文字数  約 64,000*

先のAccessの仕様を見ても、クエリの文字数はより多くの文字数を設定できます。
 
 
引用:
毎日問題無く動作している
との事ですので気にしなくとも良いとは思います。

投稿日時: 21/03/23 15:25:57
投稿者: かず

skさん、Suzuさんありがとうございます。
 
今回のaccdbは、もともとはaccess2003のmdbから移行したものです。
環境はwin7(32bit版)でaccess2003のmdbで、
その当時に、パフォーマンスの最適化を実行してエラーが出た事はありません。
 
その環境から、win10(64bit版)2019accdb(64bit版)に移行して
1年以上経過していますが毎日問題無く動作しているものの
実は細かに何か違うのかも知れませんね??
 
今の所は何も問題は発生しておりませんので
今回はCLOSEさせて頂こうと思います。
 
何かわかりましたら、この掲示板に書き込みさせて頂きますね。
 
ありがとうございました。