- PR -

ASPでADO接続でデータ取得のときに型が一致しませんエラー

1
投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2005-07-30 13:12
こんにちは。ASPでADO接続しているのですが
取得した値を数値として処理したいのですが、型一致しませんとエラーが発生します。
対処法を教えて頂けないでしょうか。

If Rs.Fields("StringData").value * 3000 > 100000 Then

で数値で比較したいのです。* 3000は画面より入力される値です。
Rs.Fields("StringData").value を数値として扱いたいです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-07-30 14:05
 過去のご質問を参照すると、ASP と ASP.NET の両方を使用されているようですね。これは、ASP のほうでよろしいでしょうか。


 ASP のほうは詳しくありませんが、型が不一致ということですので。

 VB 系の人は、あまり型の一致について気にされないようですが、数値と文字を比較、計算しようとしても、本来はできません。VB でできるのは、暗黙で型変換が行われるからです。
 今回の場合、「一般的なデータベースの値」と、「画面からの入力」を演算しようとしています。「一般的なデータベースの値」は、マニュアルで確認していただきたいのですが、object 型、variant 型などになっていると思います。また、「画面からの入力」のほうは、string 型になっていると思います。これらはどちらも“数値”ではありませんので、単純に演算することはできません。
・・・ここまでは、プログラミングの基本中の基本です。基本ですが、VB 系の方は注意されない方が多いようです。

 このように、本来“数値”では無い型同士を演算させるために、“数値に変換”する必要があります。CDec 関数などで変換します。これも、詳しいことはマニュアルで調べてください。
_________________
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2005-07-30 14:47
Jittaさんどうもです。
ASPとASP.netの連携部分がありまして、両方で作成しています。
暗黙の型変換についてはわかっていたのですが、ASPでは自動で型変換を
してくれないんでしょうか。
.netならConvert等で型を変換できるのですが、ASPの場合がわかりません。
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2005-07-30 14:52
できました。
Cint(値)で型変換したところうまくいきました。
ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-08-02 05:02
> ASPでは自動で型変換をしてくれないんでしょうか。
 「かけ算させようとしているんだから、数値なのは判るだろう」という考え方も有りですかね。Excel 2002 の VBA で実行してみたのですが、「数値 = 文字 × 文字」でも暗黙変換で計算されるのですね。
 確かに、こういうのに慣れていれば、「してくれない」と思うでしょうね。私は逆に、型を強く意識する言語から入っていますので、してくれないのが当たり前、なのですが。

 ASP の仕様は詳しくないので判りませんが、ASP.NET の方では、型を意識するようにするほうがいいと思います。
 今回はかけ算でしたが、足し算だったらどうでしょう? String + String の演算子は定義されていますから、エラーにはならないけれども、期待した結果にならない、という事態になっていたかもしれません。

Public Sub a()
  If "1" + "30000" > 100000 Then MsgBox "big" Else MsgBox "small"
End Sub

"big" or "small" どちらでしょう?Excel VBA では、"big" となりました。
 期待するのは、左辺が 30001 となることですが、文字列の連結として扱われ、"130000" となります。このあと、右辺の 100000 と比較するため、数値に変換されて 130000 > 100000 が検査されることになります。

 VS2005 になると、VB.NET でも演算子のオーバーロードができるようになります(参考)。これによって、意図しない型変換、演算が発生することがあります。今のうちに、Option Strict On をデフォルトにしておくことを薦めます。

_________________
1

スキルアップ/キャリアアップ(JOB@IT)