# 03 クイズゲーム(Pro版)

  setup.bat            ★ 先に1回だけ実行します
  run.bat              遊ぶときはこちら
  src\QUIZSET.cob      CSV を読んでデータベースに登録する
  src\QUIZPLAY.cob     出題する
  data\questions.csv   問題

  このサンプルは SIT COBOL/Pro 版が必要です。
  埋込みSQL は Pro 版の機能です。Standard 版では動きません。

02_quiz-game と同じクイズを、CSV から直接ではなく
SQL でデータベースから引きます。

# ★ 実行の順番

2段階です。順番を守ってください。

  1. setup.bat     questions.csv を読んで quiz.sqlite3 に登録します
  2. run.bat       遊びます

setup.bat を実行せずに run.bat を動かすと、問題が見つかりません。
問題を書き換えたときも、setup.bat をもう一度実行してください。

# 読みどころ

・埋込みSQL の一通りが1つのサンプルに入っています

    EXEC SQL CONNECT TO '../quiz.sqlite3' END-EXEC.    接続
    EXEC SQL CREATE TABLE ... END-EXEC                 表の作成
    EXEC SQL INSERT INTO ... VALUES (:HV-...) END-EXEC 登録
    EXEC SQL DECLARE C-QUIZ CURSOR FOR SELECT ...      カーソルの宣言
    EXEC SQL FETCH C-QUIZ INTO :HV-... END-EXEC        1件ずつ取り出す
    EXEC SQL COMMIT END-EXEC                           確定
    EXEC SQL DISCONNECT END-EXEC                       切断

・ホスト変数(: で始まる名前)
    COBOL の項目を SQL の中に書けます。
    宣言は EXEC SQL BEGIN DECLARE SECTION 〜 END DECLARE SECTION の間です。

・SQLCODE で終わりを知る
    FETCH の結果が 100 のときが「もう無い」の合図です。
    順ファイルの READ ... AT END にあたります。

      IF SQLCODE = 100 ...

・作り直しに備える(QUIZSET.cob)
    登録の前に DROP TABLE IF EXISTS で作り直します。
    成績の表(SCORES)は残したいので、そちらは
    CREATE TABLE IF NOT EXISTS にしてあります。
    作り直しても重複しないようにするための手順です。

・ランキングは SQL に任せています
    02 では全件を表に読み込んでから並べ替えましたが、
    こちらは SQL に並べ替えと件数の絞り込みをさせています。

      SELECT ... ORDER BY SCORE DESC, PLAY_DATE DESC LIMIT 5

    同じことを2通りで書いた例として、02 と読み比べてください。

# 実行するとできるファイル

  quiz.sqlite3    問題(QUESTIONS)と成績(SCORES)の2つの表が入ります

配布物には含んでいません。setup.bat を実行すると作られます。
はじめからやり直すときは、これを削除して setup.bat に戻ってください。
SQLite のツールで中を覗くこともできます。

# Standard 版との違い

02_quiz-game が CSV 版です。画面も遊びかたも同じにしてあるので、
2本のソースを読み比べると、同じことを
CSV と埋込みSQL でどう書き分けるかが分かります。

埋込みSQL そのものの確認は、次のサンプルにあります。

  第9章_データベース(SQL)\
