Accessのフォームに入力された値を使ったクエリで文字化け?

Accessでフォームに入力された値を参照してクエリで一覧表にして、それを追加クエリに変更してデータをテーブルに書き込む、ということをよくします。

方法は、クエリでフィールドに次のように、「作成する表の項目名:[Forms]![フォーム名]![フォームの項目名]」のように記載することによって、フォームに入力された値が1行の行に纏まります。

次のようにデザインされたフォームを表示します。

先ほどのクエリを実行すると、次のようになることが期待できます。

ところが次のように、日時が文字化けとなり、番号は非表示に、住所だけは正常に出ているような状態になります。

どうやら、数値や日付に関しては、内部で文字コードに変換され、その文字が表示されているようなのです。

数値に関しては、Val関数を使い強制的に値を数値に変換するように、計算式を「番号: Val([Forms]![フォーム1]![番号])」に変更すれば読み出すことができますが、日付データに関しては、「日付: Val([Forms]![フォーム1]![日時])」だと、はじめの年の「2021」しか出ず、DateValue関数を使い日付データを抽出するのに「日付: DateValue([Forms]![フォーム1]![日時])」だと、年月日の「2021/5/12」しか出ずその表をExcelにコピーしても年月日までのデータになっており、また、TimeValue関数を使い時刻データを抽出するのに「日付: TimeValue([Forms]![フォーム1]![日時])」だと、1900年1月1日の時刻データになってしまいました。

そこで、クエリの設定できるところをいろいろ操作していく中で、答えを見つけました。

クエリデザイン中のデザインタブの中にパラメーターというところがあります。

クエリを実行したときに、指定した年のデータが欲しいときに抽出条件に「[年を指定してください]」と入力しておくと、クエリ実行時に年の入力画面を表示できますが、その抽出条件の値のタイプを指定しなくてもいいのですが、指定するのであればこのパラメータで指定します。

まずこのパラメータを開くとこのような画面になります。

ここで、パラメータにデータの型を一つずつ指定していけるのです。

パラメータには計算式を入力します。「作成する表の項目名:」は不要でその後を入れます。

こんな感じで指定してOKボタンを押しクエリを実行します。

そうするとちゃんと出ます。

VBAでもなんでもそうですが、突然現れるものについてはデータの型指定はした方がいいという例ですね。

さて、この現象ですが、私の知る限り、ちょっと前のバージョンでは出なかったと思います。なので、「作成する表の項目名:[Forms]![フォーム名]![フォームの項目名]」とすればフォームの値をクエリで参照できると書いているサイトも数多いです。

今のAccessはフォームにある非連結で作成したテキストボックスには型宣言が必要、ということ、パラメータの設定で型宣言ができるということを覚えておきましょう。

コメント

タイトルとURLをコピーしました