幼稚園時代「何組」でしたか?

VB初心者なのですが、学校の課題でVBを使い簡単なクイズゲームを作ろうと思っています。
クイズは、乱数を使ってランダムに問題を表示させる形式を取っており、マイクロソフトのアクセスで作ったデータベースから問題のデータを取得するというやり方にしようと思っています。

そこで、いざプログラミングしてみたところ、データベースを読み込み、乱数を記述するところまでは上手くいったのですが、

SQLCm.CommandText = SELECT (項目の名前) FORM (クエリー(?)の名前) WHERE (問題番号を記述した項目の名前) = (乱数の名前)

と記述すると、なぜか

Cn.Open()
Value = SQLCm.ExecuteScalar
Cn.Close()

の、二行目でエラー(例外だったかもしれません)が発生し、無理矢理起動してみても、指定したラベルに何も表示されません。

先生に見ていただいたところ、変数を定義したり、データベースにアクセスできていないというわけではないとのことでした。実際、乱数のところを普通の数字に変えると、データベースに記述されている通りの問題が表示されました。

どなたか、アドバイスをいただけませんでしょうか?
また、原因を教えていただけると助かります。
初歩的な質問をして申し訳ありません。沢山のサイトや過去の質問を見てみたのですが、答えにたどり着けませんでした。
是非、ご指南の方をよろしくお願いします。

A 回答 (5件)

何度も分けて書いて申し訳ありませんが…


乱数のところを数字に変えるとうまくいく、んですよね。
だとすると…SQL文のところを、例えば
"SELECT QuestionString FROM QuestionTable WHERE QuestionNumber = RandomNumber"
みたいに書いてませんか?
上の RandomNumber にあたる部分は、ちゃんと数字(を示す文字列)に変えてやらないとダメです。
SQLCm.CommandText = "SELECT QuestionString FROM QuestionTable WHERE QuestionNumber = " & CStr(RandomNumber)
みたいな感じで。
SQL文はあくまで文字列ですので、変数名を記述しても勝手に変換してくれたりは しません。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
CSrt(RandomNumber)と記述したところ、正常に動きました!
ダブルクオーテーションがついている時点で、文字列だということに気がつくべきでした……
初歩的な質問にも関わらず、何度も丁寧に答えていただき本当にありがとうございました!

お礼日時:2008/04/25 19:49

あ、ついでに気になったのですが、SQL文はちゃんと "(ダブルクオーテーション)で括ってますか?


CommandText(と言うより、コードに記述するSQL文は全て、と言った方がいいか?)は
あくまで文字列ですからね。
    • good
    • 0

>SQLCm.CommandText = SELECT (項目の名前) FORM (クエリー(?)の名前) WHERE (問題番号を記述した項目の名前) = (乱数の名前)



FORM ではなく、FROM です。
…そういう問題じゃない?
    • good
    • 0

課題ですので、考え方を



>実際、乱数のところを普通の数字に変えると、データベースに記述されている通りの問題が表示されました。
であれば、
SQLCm.CommandText をイミディエィトウインドウなどに表示させてみて、意図されているものになっているか確認してみたらどうでしょうか?
(乱数の名前)を数字に変えると動くんですよね。
(乱数の名前)は数字で表示されますか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
課題ということで、考え方を教えてくださったご配慮に感謝しております。
おかげさまで、プログラムが動かない原因が分かりました!
ただ答えを教えていただけるより、ずっと頭に残りました。今後とも忘れることは無いと思います。
本当にありがとうございました!

お礼日時:2008/04/25 19:56

(1)乱数で発生させたコードがDB上に存在しない。


 例えば、問題番号が1~9なのに、乱数で作ったキーが0だとか・・・
(2)乱数の使い方が誤っている。

ところで、(問題番号を記述した項目)の属性は何ですか?
整数で連続したものでないと、おそらく成功しないと思いますよ。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
1も2も、確認したところきちんと動作していました。
属性についてのご指南、ありがとうございました。
新しくデータベースを製作する予定ですので、その時にはしっかりと気をつけようと思います。
ご解答、ありがとうございました!

お礼日時:2008/04/25 19:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報