ColdFusionカフェテリア
SAMURAIZ
| ↑一覧へ戻る |
ColdFusionクリニックへようこそ

エラー・症例: 復号 object 型を単純値に変換できません

作成日: 2016年1月
最終更新日: 2016年1月

■検診してみましょう。

さて、今回ご紹介するエラー・症例は、若き頃の筆者さんが体験したお話です。

ColdFusionをまだ覚えたばかりの頃、見よう見まねでデータベースから取得したデータを画面に表示するプログラムを書いたそうです。でも、プログラムを実行すると、画面には、「復号 object 型を単純値に変換できません」というエラーが。。。なぜ、こんなエラーが起こってしまったのでしょうか?画面に表示されたメッセージを確認してみましょう。

次の情報は、Web サイト開発者のデバッグに役立ちます。
リクエストを処理する際に、エラーが発生しました。

複合 object 型を単純値に変換できません。

この式は変数または遷移式結果を単純値として 要求しましたが、その結果を単純値に変換 できません。単純値は、 string 、数値、 boolean 値、 date/time である必要 があります。クエリー、配列、COM object は複合値の例です。

エラーの原因としては、複合値を単純値として使用しようとしたことが 考えられます。たとえば、cfif tag でクエリー変数を使用しようとした 場合などが該当します。


... 以下略 ...

その時に書いたプログラムを要約したものをご紹介します。皆さま、エラーの原因、お気づきでしょうか?

<cfquery datasource="cfartgallery" name="qArt">
 SELECT * FROM ART
</cfquery>

<cfoutput query="#qArt#">
	#qArt.ArtName#
</cfoutput>

■治療法は?

エラーメッセージに書かれている「複合object型」とは、文字列や数字といったテキストとは違い、クエリオブジェクト(クエリ変数)や、配列・構造体、その他オブジェクトと呼ばれるデータの集合体を指します。

それぞれの object 型に応じた呼び出し方があり、例えばクエリオブジェクトの場合は「<cfoutput query="クエリ名">〜</cfoutput>」で囲って、その中で「#クエリ名.列名#」と書いて値を呼び出しています。

エラーメッセージを見ると「この式は変数または遷移式結果を単純値として 要求しましたが、その結果を単純値に変換 できません」と書かれています。変数の値に「複合object型」が格納されているのに、文字列や数字のような呼び出し方をした(クエリオブジェクト qArt を <cfoutput>#qArt#</cfoutput>のように呼び出した)ためエラーになってしまいました。

さて、肝心の原因となる箇所は、皆さまお気づきだと思いますが、<cfoutput query="#qArt#">と query属性に指定するクエリ名(qArt)に#で囲った事が原因です。#qArt#と書いてしまったので、クエリ名ではなく、クエリオブジェクトの中身(値)を見に行ってエラーになったためです。

<cfoutput>のquery属性の「#qArt#」を「qArt」に変更して、本来の利用したいクエリオブジェクトの“名前”を指定すれば、このエラーは解消します。

■今後の予防

原因が分かれば簡単な事ですが、慣れないうちは、変数には#を付けるものと思いこんでしまってなかなか原因が気付かない事も確かです。

同じような間違いには、変数の存在確認をするIsDefined()関数で、存在を確認したい変数の“名前”を指定すべき所を、つい、変数を記述する時のクセで#を付けてしまって、「#IsDefined("#a#")#」と書いてしまい「変数Aが未定義」エラーなどの原因となります。

同じような失敗をしないよう、変数を利用する際、変数の値を指すのか、あるいは変数の名前を指定するのか、などを確認してプログラムしていくと良さそうですね。

■おくすり出しておきますね〜(まめ知識)

実は、上記で紹介したエラーは古いColdFusionのバージョンで表示されます。

ColdFusion 11や10では、エラーメッセージが改善されていて、具体的な内容(下記)になっているので、前より分かり易くなっていました。もしかしたら、筆者のような体験をした人が多かったのかもしれませんね。

次の情報は、Web サイト開発者のデバッグに役立ちます。
リクエストを処理する際に、エラーが発生しました。

CFOUTPUT の属性検証エラーです。

QUERY attribute の値が無効です。値を string に変換できません。その原因は、それが単純値ではないためです。単純値はブール値、数値、文字列、日付と時刻です。

... 以下略 ...

お大事に〜
ColdFusionの各種情報の配信


最新情報
■2017/6/26
『ColdFusion 実験室』
実験6

■2017/3/27
ColdFusion 2016 対応
インストール セットアップ情報
CFサーバーのインストール
CFビルダーのインストール

■2016/9/20
『ColdFusion 2016 リリース
Enterprise Edition 活用資料』
記事一覧

■2016/3/30
『ColdFusion 実験室』
実験4、実験5

■2015/8/10 〜
『ColdFusion クリニック』
記事一覧(随時更新中)

■2015/4/8
『JasperReportsによる帳票出力』
2. JasperReportsによる帳票出力【後編】

■2015/3/12
アップクロス株式会社
西元 貞昭様
『JasperReportsによる帳票出力』
1. JasperReportsによる帳票出力【前編】


■2015/2/25
『ColdFusionでエクセルを使いこなそう!』
4. 【上級】ColdFusionのエクセル機能を利用したPDF帳票の紹介

ColdFusionトレーニング


ColdFusionユーザーグループ
ColdFusionユーザーグループ
Copyright 2012 Samuraiz Corporation. All Rights Reserved.