• ベストアンサー

VBを介したデータベース閲覧についての質問

VB初心者なのですが、学校の課題でVBを使い簡単なクイズゲームを作ろうと思っています。 クイズは、乱数を使ってランダムに問題を表示させる形式を取っており、マイクロソフトのアクセスで作ったデータベースから問題のデータを取得するというやり方にしようと思っています。 そこで、いざプログラミングしてみたところ、データベースを読み込み、乱数を記述するところまでは上手くいったのですが、 SQLCm.CommandText = SELECT (項目の名前) FORM (クエリー(?)の名前) WHERE (問題番号を記述した項目の名前) = (乱数の名前) と記述すると、なぜか Cn.Open() Value = SQLCm.ExecuteScalar Cn.Close() の、二行目でエラー(例外だったかもしれません)が発生し、無理矢理起動してみても、指定したラベルに何も表示されません。 先生に見ていただいたところ、変数を定義したり、データベースにアクセスできていないというわけではないとのことでした。実際、乱数のところを普通の数字に変えると、データベースに記述されている通りの問題が表示されました。 どなたか、アドバイスをいただけませんでしょうか? また、原因を教えていただけると助かります。 初歩的な質問をして申し訳ありません。沢山のサイトや過去の質問を見てみたのですが、答えにたどり着けませんでした。 是非、ご指南の方をよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

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

salere
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.4

あ、ついでに気になったのですが、SQL文はちゃんと "(ダブルクオーテーション)で括ってますか? CommandText(と言うより、コードに記述するSQL文は全て、と言った方がいいか?)は あくまで文字列ですからね。

すると、全ての回答が全文表示されます。
回答No.3

>SQLCm.CommandText = SELECT (項目の名前) FORM (クエリー(?)の名前) WHERE (問題番号を記述した項目の名前) = (乱数の名前) FORM ではなく、FROM です。 …そういう問題じゃない?

すると、全ての回答が全文表示されます。
noname#60992
noname#60992
回答No.2

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

salere
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.1

(1)乱数で発生させたコードがDB上に存在しない。  例えば、問題番号が1~9なのに、乱数で作ったキーが0だとか・・・ (2)乱数の使い方が誤っている。 ところで、(問題番号を記述した項目)の属性は何ですか? 整数で連続したものでないと、おそらく成功しないと思いますよ。

salere
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A