@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

実例で学ぶASP.NETプログラミング 第5回での質問です

1
投稿者投稿内容
プルドック
会議室デビュー日: 2005/11/08
投稿数: 2
投稿日時: 2005-11-08 16:39
いつも参考にさせていただいてます
ASP.NETを勉強しだして1ヶ月あまりの素人です
VB6やAccessの方では少しばかりプログラムしたくらいの素人です

いつも見てばかりいて投稿させていただくのは初めてなのですが
数日悩んでいたもので思い切って投稿させていただきました

初歩的なことと言う事で叱責を受けるかもしれませんが
すみませんがお力お貸し頂ければと思います。

本題ですが 「第5回 DB連携ページをASP.NETで構築する(後編)」で

1: Public Function TPRODID(ByVal VCNT As Integer) As Array
2: Dim PSET As New PVSET()
3: Dim PVIEW As New DataView()
4: Dim I As Integer
5: Dim TID(VCNT - 1) As Integer
6: DC.FDPV(PSET)
7: PVIEW.Table = PSET.Tables("酒完成表")
8: PVIEW.RowFilter = "特売価格 > 0"
9: Dim PMID() As String = RNDID(PVIEW.Count, VCNT)
10: For I = 0 To VCNT - 1
11: TID = PVIEW(PMID(I))("ID")
12: Next
13: Return TID
14: End Function
15:
16 Public Function RNDID(ByVal MAXID As Integer, ByVal NEEDID As Integer) As Array
17: Dim I As Integer
18: Dim RID As New Random()
19: Dim SPID As Integer
20: Dim PTID As New System.Collections.Specialized.StringCollection()
21: Dim PMID(NEEDID - 1) As String
22: For I = 0 To NEEDID - 1
23: Do
24: SPID = RID.Next(0, MAXID - 1)
25: Loop While PTID.IndexOf(SPID) = False
26: PTID.Add(SPID)
27: Next
28: PTID.CopyTo(PMID, 0)
29: Return PMID
30: End Function

のプログラムを実行したのですが
どうしても

指定されたキャストは有効ではありません。
説明 : 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.InvalidCastException: 指定されたキャストは有効ではありません。

ソース エラー:
行 315: For I = 0 To VCNT - 1
行 316:
行 317: TID = PVIEW(PMID(I))("ID") ここでエラーです
行 318: Next
行 319: Return TID

として TIDの所でエラーになってしまいます

連載されている通り実施しているとは思うのですがなかなか理解するのも難しく
すみません 同じように連載を実際に勉強されているかたも多いと思いますので
もしかしたら同様に悩まれた方いらっしゃいましたら 教えていただければ
大変助かります。

PS,この掲載してありますACCESSをダウンロードしてクエリを確認したのですが
酒完成表のクエリもなかったのですよね、きっと??

動作環境
OS WindowsXP VS.NET2003 ACCESSで動作させています

いつも連載ホントに勉強になります
今後も勉強させていただくつもりですので
がんばってください。




けろ
会議室デビュー日: 2005/04/06
投稿数: 4
投稿日時: 2005-11-08 17:12
>10: For I = 0 To VCNT - 1
>11: TID = PVIEW(PMID(I))("ID")
>12: Next

TID(I) = PVIEW(PMID(I))("ID")
じゃないでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-08 20:41
どこで例外が発生しているかくらいはハッキリ追いませんか?
デバッグをやるにおいて、"どこで" は重要ですよね。

変数の命名が Microsoft のガイドラインから逸脱していますので、
ソースを読みきるまでに、すごい時間を費やしてしまいました。

暗黙の型変換がありますよね。
Option Strict On を使用することをお勧めします。
暗黙の型変換を失くすことで、「InvalidCastException」が起こる確率はかなり減るでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
プルドック
会議室デビュー日: 2005/11/08
投稿数: 2
投稿日時: 2005-11-09 09:40
けろさん、じゃんぬねっとさん ありがとうございます

けろさんのご指摘の通りに追記しましたら 正常に動きました
大変ありがとうございました

じゃんぬねとさんのご指摘の通り Option Strict と言う物があったのですね
すみません まだまだ手探り状態での勉強不足で こういう役立つものあるとは
存じ上げておりませんでした、失礼致しました
また、そうですね デバッグでの"どこで"は大切ですね
相手方に伝えるのに際して最短の道筋になるものですから
申し訳ございませんでした、今後相手に伝わるように気をつけます

まだまだ、勉強中でまたご迷惑おかけするかとは思いますが
何かとよろしくお願いいたします。
1

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