SQLiteについて
[Home]

 SQLiteについて

 最初に

多少なりともプログラムを齧(かじ)った事のある人なら、SQLite(エスキューライト)を知らない方は居ないと思います。
ウィキペディアによれば、SQLite は、パブリックドメインの軽量な関係データベース管理システム (RDBMS) であると記載されています。
私も10年以上前から利用しており、下記の画像は SQLite で作成した競馬データベースから、データを読み込んでレース結果を表示させたものです。
私は、JRA-VAN で、競馬予想ソフトや競馬のデータベースを公開しておりますので、Microsoft Access や SQLite、SQLServer との付き合いは長いです。

SQLite画面1

上記のソフト(馬ちゃんの馬吉 SQLite版)は、JRA-VAN の「ソフト開発サポート」→ 「プログラミングパーツ・開発支援ツール提供コーナー」 にある「馬吉ソース公開版」を、SQLite で作成したデータベースに対応するように改造したものです。 最新の更新は2009年4月13日で、プログラミング言語は VB6 です。
私もだいぶ以前から、 馬吉の解析 で、解析を行っております。
JRA-VAN の 馬吉 for DataLab は、常に人気上位にランクされておりますが、「馬吉ソース公開版」は解析が難解で、相当に根気のある人でないと途中で挫折してしまいます。
私のソフトも、手を抜いた部分が(結構)多いので、データベースソフトのおまけ(データベースの内容確認)として、添付をしております。

私のソフトもソースの提供をしても構わないのですが、JRA-VAN にソフトを公開している人の中にはゴミソフト開発者が多くて、気分が乗りません。
彼等から見ると、私が開発して公開している Microsoft Access で作成する データベース は、使い物にならない(よく壊れたり、処理が遅いとか)そうです。
いい加減な説明にむかつきますが、そんな屑ソフトが JRA-VAN では圧倒的な人気になっているのですから、最下位周辺をさまよっている私のソフトはゴミなのでしょう。
そのゴミ扱いされているソフト(Microsoft Access で作成したデータベース)を、私はメインで10年以上使っております。
私だけでなく、JRA-VAN に御加入の方(一か月に20〜30人程度の方ですが)にもお使いいただいております。
SQLite で作成したデータベースも決して悪くはありませんが、 Microsoft Access で間に合っている(十分に満足している)のが現状です。


 SQLiteの特徴

SQLite のHome ページです。本来なら、ここを見るだけで解説は不要なのですが、残念ながら日本人は語学の能力が低く、世界共通語と言われている英語でさえ(英語圏以外の人達並に)理解出来る人は少数です。 以前に、安倍晋三首相の国連での英語のスピーチの映像を見ましたが、聞くに堪えない発音(汚い英語)でした。(素人の私にもそれは感じます)
トランプにも、安倍晋三の訛(なま)りの多い英語を(馬鹿にされて)真似られておりましたが、あれでも何日も専門の講師を雇って練習したのでしょうから、同じ日本人としては情けなく、恥ずかしいです。(私は脇に通訳を置いて話をした方が、聞いている人が疲れない分、良いと思っております)
日本語でも独特の話方なので、ビスケッティ佐竹は安倍晋三の物真似の第一人者ですし、サンドウィッチマン・伊達や、松村邦弘などもそっくりな真似が出来ます。

安倍晋三首相は英語が下手(基本的にスピーチは苦手)ですが、彼だけでは無くて 日本人の英語力は世界53位 「EF EPI英語能力指数」2019年版発表 だそうです。
英語が得意な国は、オランダ、スウェーデン、ノルウェーだそうですが、「非常に高い英語能力」とされた国は14カ国もあるそうなので、もう少し何とならないでしょうか。
世界100カ国・地域の内の53位だから平均ではないかと言う(愚かな)人も居るのでしょうが、言語のレベルは知能のレベルと比例しているのを忘れてはいけません。
特にプログラムを志す人が英語の文献を読めないなら、先(将来)は見えております。

話が脱線してしまいましたが、要は SQLite のサイトを見ても内容を理解出来る人はほとんどおりませんので、日本語サイトの SQLite の特徴の解説を引用させていただきます。
日本語サイトは、解説が必ずしも適切であるとは限りませんが、理解出来ないよりは増しでしょう。


 SQLiteのデータベースのメリットとデメリット

SQLiteのメリット
(1)動作が軽い
(2)著作権がない
(3)ファイルが1つだけなので、保守が簡単
(4)サーバ側にデータベースを用意する必要がない

SQLiteのデメリット
(1)パスワードが存在しない
(2)複数の同時書き込みができない

グーグルの検索上位のサイトの内容を引用したものですが、デメリットとして記載されている内容は間違っていると思います。
私は SQLite のデータベースにパスワードを設定して運用した事がありませんので、詳しくは知りませんが、パスワードの設定方法を記載しているサイトを見た事がありますし、例え SQLite 単体では出来なくても、代用する方法は(いくらでも)あります。

「複数の同時書き込みができない」との記載も誤りだと思います。多人数の同時書き込みは厳しいと思いますが、排他機能で数人程度の同時書き込みには十分に耐えられる筈です。
ただ、私がデメリットではないかと思っているのが、内部への記載がUTF-8(UTF-16)である点です。このデータベースが世界共通で使うためには避けられない事ですが、当然ながらデータベースは肥大しますので、私は ShiftJIS を使用しておりますが、色々な部分で文字化けの問題が生じます。 そのため、対応策を熟知していないと、運用上で悩まされる事になると思います。この点は、内部言語を何にするかを含めて、検討すべきだと思います。
それから、SQLite には、データベースの内容を確認出来るツールが無い点も問題です。「MS Access」のような優れた GUI が備わっておれば良いのですが、存在しておりません。

確かに、 PupSQLite TkSQLite などのフリーソフトも数種類、あるにはありますが、私が試した限りでは、競馬データのように200〜300万件のデータの内容を確認するには、表示に時間が掛かって使い物になりません。酷いソフトだと動作中に堕ちてしまいました。これは重欠点だと思うのですが、使用者は必要性を感じないのでしょうか。
現在は、私も一般的な GUI ソフトでデータベースの中を覗く事はありませんが、開発時には DB Browser for SQLite を使用しておりました。当時はこのソフトが(私が知る限り)最強でした。 それと、2018年12月17日に 「SQLite」データベースに脆弱性 との記事もありますので、例え個人の使用とは言っても、セキュリティの維持には十分気をつける必要があります。 それは兎も角、SQLite の特徴を更に御理解いただくために、別サイトの解説も以下に記載しておきます。

SQLite(エスキューライト)とは、軽量コンパクトなリレーショナルデータベースシステムです。 「小型」「高速」「自己完結型」「高信頼性」「高機能」のSQLデータベースエンジンを実装するC言語ライブラリとして、主に「組み込み用途」や「小規模システムのデータストア」として利用されています。

SQLiteは「小型」「高速」「自己完結型」「高信頼性」「高機能」のSQLデータベースエンジンを実装するC言語ライブラリです。

SQLiteはコードフットプリントが小さく、「メモリ」「ディスクスペース」「ディスク帯域幅」を効率的に使用でき、データベース管理者によるメンテナンスを必要としません。

単独アプリケーションとして動作でき、インストールも簡単で非常にコンパクトであるため、アプリケーションやデバイスでローカルデータストレージとして活用されています。

SQLiteは多くのスマートフォンやコンピュータに組み込まれており、無数のアプリケーションにバンドルされているため、「世界で最も使われているデータベースエンジン」と言われています。


ここまで読んでいただければ、SQLite はライセンスを気にする必要がなく、使用上でも特に問題が無いデータベースであるのが認識できると思います。
以降に SQLite の文法解説を記載しようと思っていたのですが、文法はどうしても飽きられますし、読んでいただいても直ぐに忘れますので止めます。
文法はプログラムを組む上で必要ですが、必要になった時にネットで探せばいくらでも見つかりますから、ここに記載する必要性は感じません。


 SQLiteを使ってみる

「SQLiteを使ってみる」と記載しているサイトを覗いてみると、コマンドプロンプトを使用してデータベースをを作成したり、データを入力したりしているサイトが非常に多いです。 それで、SQLite は軽いだの、使い易いだのと言っておりますが、コマンドプロンプトを使用してそんな事が言える訳がありません。
どうせ、どこかのサイトの丸写しなのでしょうが、コマンドプロンプトで SQLite を弄るのは止めた方が良いです。
効率の悪さもさる事ながら、色々な問題に遭遇して、それを解決できなくて、SQLite は使い難いとの印象を受けるだけです。
コマンドプロンプトの使用で問題になるのは日本語を使用する場合です。

日本語を使用しなければ問題点に気づかないかもしれませんが、データベースの中で日本語を使用しない人は居ないでしょうから、文字化けの問題に必ず遭遇します。 その原因は言うまでもなく、SQLite は UTF-8 を使用しているのに対して、コマンドプロンプトは Shift-JIS を使用しているためです。 SQLite は UTF-8 もしくは UTF−16(とその派生)ぐらいしか切り換えられませんが、コマンドプロンプトは Shift-JIS だけでなく UTF-8 の使用も可能ですから、一応は使えるのですが、コマンドプロンプトで文字コードを変更する方法などを知っている人は皆無に近いでしょう。 仮に変更できたとしても、それを元の Shift-JIS に戻すのも、簡単ではありませんから、操作を覚えられる人などいないと思います。
(最近のOSは、終了するとShift-JISに戻るらしいです)
一応、コマンドプロンプトで文字コードの切り換え方法を下記に記載しますが、ほとんど役に立たない雑学でしょう。

■コマンドプロンプトの文字コード確認方法
chcp と入力して[Enter]キーを押せば、「現在のコード ページ: 932」とかの表示が出ます。
■文字コードをUTF8に設定する場合
chcp 65001 と入力して[Enter]キーを押せば、UTF-8 になります。

以上が解説しているサイトの内容の丸写しですが、私は使った事がありませんので、動作は保証できません。
コマンドプロンプトを使うぐらいなら、フリーの GUI ソフトを使った方が遥かにトラブルが少ないでしょう。
前に PupSQLite や TkSQLite などのフリーの GUI ソフトは使い物にならないと書きましたが、バージョンも上がっているでしょうし、競馬のデータベースのように100〜300万ものデータを登録しないのであれば、問題はないと思います。
色々なサイトを眺めていると、フリーの GUI ソフトの紹介も多くて、 DB Browser for SQLite を薦めているサイトがありましたので、そこのダウンロードページから、「DB Browser for SQLite - .zip (no installer) for 32-bit Windows & Windows XP」をダウンロードして起動してみました。

私が作成した競馬データベースの中の UMA_RACE を読み込ませた画像です。
SQLite画面5

このデータは、データ量が多くて、160万個以上ありますので、さすがに読み込みが遅かったです。
スクロールバーを動かして別のデータを見る場合もデータが表示されるまで待たされましたが、読み込み中に堕ちる事はありませんでしたので、使えるかも知れません。
こうして見ると、MSAccess の GUI の構成が、いかに優れているのか実感出来ます。(MSAccess の場合は、待たせている間でも、読み込み中のデータは表示しています)
それから、MSAccess は、Windows での使用が前提になっておりますので、文字コードの問題は存在しません。(SQLServer も同様です)

このソフトは、Shift-JIS で登録している日本語が文字化けしていない点も評価できます。
実は、このソフトを使って、簡易的なデータベースの作成例を載せようと思いましたが、気力が失せてしまいました。
コマンドプロンプトを使用するよりは、数倍効率的になるとは思いますが、プログラムで作成する事に比べれば、非効率極まりないです。
あくまで、プログラムを作成することが出来ない方向けの機能であるのは確かでしょう。

どうやら、プログラムを作成することが出来ない方は、エクセルなどを使って CSV ファイルを作成して、それを、SQLite に読み込ませているようですが、メモ帳で CSV ファイルを作成する場合は、UTF-8 で保存した場合に、BOM付きになってしまう問題でトラブルが多発しているようです。
SQLite は BOM無しの UTF-8 が必要な事に起因します。世界の主流が BOM無しである点を考えれば当然なのですが、マイクロソフトは今まで変える事がありませんでした。
Windows 10 になってから、ようやくマイクロソフトは、メモ帳で、BOM無しの UTF-8も作成できるように、文字コードを選択できるようにしました(何もしなければ BOM無しの UTF-8で保存します)が、どれだけ多く人が原因不明のトラブルに悩まされ、現在も悩んでいる人がいるかでしょう。


 開発環境の構築

開発環境は、プログラミング言語はC++(Cも含む)を主体にして行います。 私は開発の容易な VB6 で開発することが多いのですが、安定性を考えるとC++(Cも含む)が良いと思っているからです。 エクセルでも VBA を使用すれば動作する環境は構築出来ますが、Office関係はマイクロソフトが頻繁にバージョンアップやアップデートを行っており、使用環境の依存性が高くて使い物になりません。 人気の C# で作成するのが喜ばれるのでしょうが、私が不得手なのと、 C# がC++(Cも含む)よりも優れているとは思えないからです。
だいたい、エクセルで造られたプログラムでないと馴染みが無くて使えないなどと言う人種は、会社にとってもマイナスの存在なのですが、なぜか重宝されているのが不思議です。

ついつい話が脱線してしまいますが、まず SQLite の ダウンロード から始めます。これはどんなサイトにも記載しておりますね。
2019年10月30日現在の SQLite のダウンロードページですが、現在のバージョンは Version 3.30.1 (2019-10-11) ですが、その内にバージョンアップするでしょう。
SQLite画面2

ダウンロードするファイルは、@のsqlite-amalgamation-3300100.zip(2.24 MiB) とAのsqlite-dll-win32-x86-3300100.zip(478.32 KiB) です。
DLL は、64bit 対応の sqlite-dll-win64-x64-3300100.zip(788.50 KiB)の方にすべきかもしれませんが、大差はないだろうと思って、昔からそのようにしております。
動作速度的な面で体感できるほどに優位であれば、変更は容易ですから変更致します。私はメインで使用しているパソコンが、Windows 7 32bit なのも関係しております。

@のsqlite-amalgamation-3300100.zipを解凍すると以下の4つのファイルが入っています。
shell.c
sqlite3.c
sqlite3.h
sqlite3ext.h

Aのsqlite-dll-win32-x86-3300100.zipを解凍すると以下の2つのファイルが入っております。
sqlite3.def
sqlite3.dll

これらのファイルを使って、C++(Cも含む)の開発に必要な lib ファイル(SQLite3.lib)を作成します。


 SQLite3.libファイルの作成

作成したプログラムが sqlite3.dll を使用するためには、開発環境にあった lib(SQLite3.lib)ファイルが必要です。ここでは SQLite3.lib を作成する手順を御説明します。
lib ファイルの作成は、手持ちの VS2005 を使用して行いましたが、他のバージョンでも大差はないと思います。
この方法も、色々なサイトで解説されておりますので、分かり難いようであれば、他のサイトもご覧になってください。

基本的には、VS2005 のlib.exe を使用して、コマンドプロンプト一行で作成出来るのですが、環境によっては色々とありますので、私は以下のようにしております。
(1)Cドライブに 適当なフォルダ(ここではsqlite)を作成します。
(2)作成したフォルダに、以下のファイルをコピ−します。
lib.exe(C:\Program Files\Microsoft Visual Studio 8\VC\bin)
mspdb80.dll(C:\Program Files\Microsoft Visual Studio 8\Common7\IDE)
sqlite3.h(SQLite のダウンロードページからダウンロードしたファイル)
sqlite3ext.h(SQLite のダウンロードページからダウンロードしたファイル)これはいらないと思って削除しましたが、入れて置いた方が良いかも知れません。
sqlite3.def(SQLite のダウンロードページからダウンロードしたファイル)

私がC++の覚えたての頃にやった方法ですが、特定のソフトのフォルダから勝手にファイルをコピーしてくると、トラブルの元になりますので、本来は環境変数でリンクを張るべきです。(既にリンクが張ってある場合が多いです)

コマンドプロンプトを立ち上げて、C:\sqlite に移動します。
SQLite画面3

画像のように、コマンドは、lib /def:sqlite3.def と入力するだけです。
念のため、管理者権限で実行しましたが、アカウントが管理者(Administrator)であれば実行に問題はないでしょう。

実行後の sqlite ファルダの内容です。
SQLite画面4

sqlite3.lib が作成されているのが確認できます。用途は不明ですが、sqlite3.exp と言うファイルも新たに作成されております。


 SQLite3でデータベースを作成

実際にSQLite3でデータベースを作成した例を示します。
解説サイトの多くは、簡易的にデータベースを作成してデータを2,3個登録して終わりにしているのが多いですが、ここでは「馬ちゃんの馬吉 SQLite版」で実際に使用しているデータベースを構築したいと思います。 このデータベースは、テーブル名が JRA-VAN で解説しているテーブル名に準拠しておりますので、「JRA-VAN データラボ」を使用してデータベースを構築する場合は参考になると思います。

実際のデータは、データ数が100〜300万個になりますので、データベースの構築時間や、動作させた場合の動きなどをチェックする事が出来ます。
以下にプログラムの内容を記載しますが、10年以上前に解説サイトを参考にして作成したものですので、プログラムとしては古い形式です。
SQLite の最新バージョンで動作確認しましたら、問題なく動作しましたので、参考に記載しているだけです。
プログラムは長いですが、動作はデータベースの作成とテーブルを作成をしているだけですから、記載内容は単調になります。

私の場合ですが、以下のコードに SQLite.cpp と名前を付けて、ダウンロードした sqlite3.h と一緒にコンパイルすれば、データベースが作成されました。
但し、開発環境によっては別途、ファイルが必要になる場合があるかも知れませんので御注意ください。

// sqlite3.dllをVC++から使う (http://lcl.web5.jp/prog/pmemo/sqlite3dll.html) 様を参考にさせていただきました。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include "sqlite3.h"

// sqlite3.dll内関数ポインタ型定義
typedef int (__cdecl * pOpen)(char *, sqlite3 **);
typedef int (__cdecl * pExec)(sqlite3 *, const char *, sqlite3_callback, void *, char **);
typedef int (__cdecl * pGetTable)(sqlite3 *, const char *, char ***, int *, int *, char **);
typedef int (__cdecl * pFreeTable)(char **);
typedef int (__cdecl * pClose)(sqlite3 *);

int main() {

    HINSTANCE hDll;
    // 関数ポインタ変数
    pOpen sqlite3_open;
    pExec sqlite3_exec;
    pGetTable sqlite3_get_table;
    pFreeTable sqlite3_free_table;
    pClose sqlite3_close;

    // sqlite3.dllをロード
    hDll = LoadLibrary("sqlite3");

    if (hDll == NULL) {
        MessageBox( NULL, "システムフォルダに sqlite3.dll がありません。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    }

    // sqlite3関数のアドレスを取得
    sqlite3_open = (pOpen)GetProcAddress(hDll, "sqlite3_open");
    sqlite3_exec = (pExec)GetProcAddress(hDll, "sqlite3_exec");
    sqlite3_get_table = (pGetTable)GetProcAddress(hDll, "sqlite3_get_table");
    sqlite3_free_table = (pFreeTable)GetProcAddress(hDll, "sqlite3_free_table");
    sqlite3_close = (pClose)GetProcAddress(hDll, "sqlite3_close");

    sqlite3 *db;
    char *err;
    char SQL[10000];	// 8000→10000に変更
    int    rc;

    printf("Umachan.db を作成しています。\n");
    rc = sqlite3_open("Umachan.db", &db);    // データベースファイルを作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "Umachan.db の作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    }

    // 1.SETUP_TIME
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS SETUP_TIME(");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "StartProgram                  CHAR(20),");
    strcat(SQL, "SetupTime                     CHAR(14),");
    strcat(SQL, "YSCH                          CHAR(14),");
    strcat(SQL, "DIFF                          CHAR(14),");
    strcat(SQL, "RACE                          CHAR(14),");
    strcat(SQL, "BLOD                          CHAR(14),");
    strcat(SQL, "TOKU                          CHAR(14),");
    strcat(SQL, "SLOP                          CHAR(14),");
    strcat(SQL, "HOSE                          CHAR(14),");
    strcat(SQL, "HOYU                          CHAR(14),");
    strcat(SQL, "ThisWeek                      CHAR(14),");
    strcat(SQL, "KisotenTime                   CHAR(10),");
    strcat(SQL, "KijyunTime                    CHAR(8),");
    strcat(SQL, "RaceYear                      CHAR(4),");
    strcat(SQL, "RaceDay                       CHAR(4),");
    strcat(SQL, "YosoHoho                      CHAR(1),");
    strcat(SQL, "Torikomi                      CHAR(10),");
    strcat(SQL, "DataBaseName                  CHAR(14),");
    strcat(SQL, "DataBasePath                  CHAR(20),");
    strcat(SQL, "DataBaseType                  CHAR(1),");
    strcat(SQL, "Odds_DirPath                  CHAR(20),");
    strcat(SQL, "Odds_DIR                      CHAR(8),");
    strcat(SQL, "SetTimer                      CHAR(4),");
    strcat(SQL, "TargetLink                    CHAR(20),");
    strcat(SQL, "UserID                        CHAR(10),");
    strcat(SQL, "KoureibaNen                   CHAR(4),");
    strcat(SQL, "Version                       CHAR(4),");
    strcat(SQL, "Comment                       CHAR(80),");
    strcat(SQL, "CONSTRAINT PK_SETUP_TIME PRIMARY KEY (MakeDate));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "SETUP_TIME テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("SETUP_TIME テーブルを作成しました。\n");
    }

    // 2.特別レース
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS TOKU_RACE(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");  // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "YoubiCD                       CHAR(1),");
    strcat(SQL, "TokuNum                       CHAR(4),");
    strcat(SQL, "Hondai                        CHAR(60),");
    strcat(SQL, "Fukudai                       CHAR(60),");
    strcat(SQL, "Kakko                         CHAR(60),");
    strcat(SQL, "HondaiEng                     CHAR(120),");
    strcat(SQL, "FukudaiEng                    CHAR(120),");
    strcat(SQL, "KakkoEng                      CHAR(120),");
    strcat(SQL, "Ryakusyo10                    CHAR(20),");
    strcat(SQL, "Ryakusyo6                     CHAR(12),");
    strcat(SQL, "Ryakusyo3                     CHAR(6),");
    strcat(SQL, "Kubun                         CHAR(1),");
    strcat(SQL, "Nkai                          CHAR(3),");
    strcat(SQL, "GradeCD                       CHAR(1),");
    strcat(SQL, "SyubetuCD                     CHAR(2),");
    strcat(SQL, "KigoCD                        CHAR(3),");
    strcat(SQL, "JyuryoCD                      CHAR(1),");
    strcat(SQL, "JyokenCD1                     CHAR(3),");
    strcat(SQL, "JyokenCD2                     CHAR(3),");
    strcat(SQL, "JyokenCD3                     CHAR(3),");
    strcat(SQL, "JyokenCD4                     CHAR(3),");
    strcat(SQL, "JyokenCD5                     CHAR(3),");
    strcat(SQL, "Kyori                         CHAR(4),");
    strcat(SQL, "TrackCD                       CHAR(2),");
    strcat(SQL, "CourseKubunCD                 CHAR(2),");
    strcat(SQL, "HandiDate                     CHAR(8),");
    strcat(SQL, "TorokuTosu                    CHAR(3),");
    strcat(SQL, "CONSTRAINT PK_TOKU_RACE PRIMARY KEY (KeyCord));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "特別レース(TOKU_RACE)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("特別レース(TOKU_RACE)テーブルを作成しました。\n");
    }

    // 3.特別登録馬
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS TOKU(");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");  // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "Num                           CHAR(3),");
    strcat(SQL, "KettoNum                      CHAR(10),");
    strcat(SQL, "Bamei                         CHAR(36),");
    strcat(SQL, "UmaKigoCD                     CHAR(2),");
    strcat(SQL, "SexCD                         CHAR(1),");
    strcat(SQL, "TozaiCD                       CHAR(1),");
    strcat(SQL, "ChokyosiCode                  CHAR(5),");
    strcat(SQL, "ChokyosiRyakusyo              CHAR(12),");  // 8->12
    strcat(SQL, "Futan                         CHAR(3),");
    strcat(SQL, "Koryu                         CHAR(1),");
    strcat(SQL, "CONSTRAINT PK_TOKU PRIMARY KEY (KeyCord,Num));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "特別登録馬(TOKU)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("特別登録馬(TOKU)テーブルを作成しました。\n");
    }

    // 4.レース詳細 (2819 byte)
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS RACE(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");   // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "YoubiCD                       CHAR(1),");
    strcat(SQL, "TokuNum                       CHAR(4),");
    strcat(SQL, "Hondai                        CHAR(60),");
    strcat(SQL, "Fukudai                       CHAR(60),");
    strcat(SQL, "Kakko                         CHAR(60),");
    strcat(SQL, "HondaiEng                     CHAR(120),");
    strcat(SQL, "FukudaiEng                    CHAR(120),");
    strcat(SQL, "KakkoEng                      CHAR(120),");
    strcat(SQL, "Ryakusyo10                    CHAR(20),");
    strcat(SQL, "Ryakusyo6                     CHAR(12),");
    strcat(SQL, "Ryakusyo3                     CHAR(6),");
    strcat(SQL, "Kubun                         CHAR(1),");
    strcat(SQL, "Nkai                          CHAR(3),");
    strcat(SQL, "GradeCD                       CHAR(1),");
    strcat(SQL, "GradeCDBefore                 CHAR(1),");
    strcat(SQL, "SyubetuCD                     CHAR(2),");
    strcat(SQL, "KigoCD                        CHAR(3),");
    strcat(SQL, "JyuryoCD                      CHAR(1),");
    strcat(SQL, "JyokenCD1                     CHAR(3),");
    strcat(SQL, "JyokenCD2                     CHAR(3),");
    strcat(SQL, "JyokenCD3                     CHAR(3),");
    strcat(SQL, "JyokenCD4                     CHAR(3),");
    strcat(SQL, "JyokenCD5                     CHAR(3),");
    strcat(SQL, "JyokenName                    CHAR(60),");
    strcat(SQL, "Kyori                         CHAR(4),");
    strcat(SQL, "KyoriBefore                   CHAR(4),");
    strcat(SQL, "TrackCD                       CHAR(2),");
    strcat(SQL, "TrackCDBefore                 CHAR(2),");
    strcat(SQL, "TrackMeiBefore                CHAR(2),");
    strcat(SQL, "CourseKubunCD                 CHAR(2),");
    strcat(SQL, "CourseKubunCDBefore           CHAR(2),");
    strcat(SQL, "Honsyokin1                    CHAR(8),");
    strcat(SQL, "Honsyokin2                    CHAR(8),");
    strcat(SQL, "Honsyokin3                    CHAR(8),");
    strcat(SQL, "Honsyokin4                    CHAR(8),");
    strcat(SQL, "Honsyokin5                    CHAR(8),");
    strcat(SQL, "Honsyokin6                    CHAR(8),");
    strcat(SQL, "Honsyokin7                    CHAR(8),");
    strcat(SQL, "HonsyokinBefore1              CHAR(8),");
    strcat(SQL, "HonsyokinBefore2              CHAR(8),");
    strcat(SQL, "HonsyokinBefore3              CHAR(8),");
    strcat(SQL, "HonsyokinBefore4              CHAR(8),");
    strcat(SQL, "HonsyokinBefore5              CHAR(8),");
    strcat(SQL, "Fukasyokin1                   CHAR(8),");
    strcat(SQL, "Fukasyokin2                   CHAR(8),");
    strcat(SQL, "Fukasyokin3                   CHAR(8),");
    strcat(SQL, "Fukasyokin4                   CHAR(8),");
    strcat(SQL, "Fukasyokin5                   CHAR(8),");
    strcat(SQL, "FukasyokinBefore1             CHAR(8),");
    strcat(SQL, "FukasyokinBefore2             CHAR(8),");
    strcat(SQL, "FukasyokinBefore3             CHAR(8),");
    strcat(SQL, "HassoTime                     CHAR(4),");
    strcat(SQL, "HassoTimeBefore               CHAR(4),");
    strcat(SQL, "TorokuTosu                    CHAR(2),");
    strcat(SQL, "SyussoTosu                    CHAR(2),");
    strcat(SQL, "NyusenTosu                    CHAR(2),");
    strcat(SQL, "TenkoCD                       CHAR(1),");
    strcat(SQL, "SibaBabaCD                    CHAR(1),");
    strcat(SQL, "DirtBabaCD                    CHAR(1),");
    strcat(SQL, "LapTime1                      CHAR(3),");
    strcat(SQL, "LapTime2                      CHAR(3),");
    strcat(SQL, "LapTime3                      CHAR(3),");
    strcat(SQL, "LapTime4                      CHAR(3),");
    strcat(SQL, "LapTime5                      CHAR(3),");
    strcat(SQL, "LapTime6                      CHAR(3),");
    strcat(SQL, "LapTime7                      CHAR(3),");
    strcat(SQL, "LapTime8                      CHAR(3),");
    strcat(SQL, "LapTime9                      CHAR(3),");
    strcat(SQL, "LapTime10                     CHAR(3),");
    strcat(SQL, "LapTime11                     CHAR(3),");
    strcat(SQL, "LapTime12                     CHAR(3),");
    strcat(SQL, "LapTime13                     CHAR(3),");
    strcat(SQL, "LapTime14                     CHAR(3),");
    strcat(SQL, "LapTime15                     CHAR(3),");
    strcat(SQL, "LapTime16                     CHAR(3),");
    strcat(SQL, "LapTime17                     CHAR(3),");
    strcat(SQL, "LapTime18                     CHAR(3),");
    strcat(SQL, "LapTime19                     CHAR(3),");
    strcat(SQL, "LapTime20                     CHAR(3),");
    strcat(SQL, "LapTime21                     CHAR(3),");
    strcat(SQL, "LapTime22                     CHAR(3),");
    strcat(SQL, "LapTime23                     CHAR(3),");
    strcat(SQL, "LapTime24                     CHAR(3),");
    strcat(SQL, "LapTime25                     CHAR(3),");
    strcat(SQL, "SyogaiMileTime                CHAR(4),");
    strcat(SQL, "HaronTimeS3                   CHAR(3),");
    strcat(SQL, "HaronTimeS4                   CHAR(3),");
    strcat(SQL, "HaronTimeL3                   CHAR(3),");
    strcat(SQL, "HaronTimeL4                   CHAR(3),");
    strcat(SQL, "Corner1                       CHAR(1),");
    strcat(SQL, "Syukaisu1                     CHAR(1),");
    strcat(SQL, "Jyuni1                        CHAR(70),");
    strcat(SQL, "Corner2                       CHAR(1),");
    strcat(SQL, "Syukaisu2                     CHAR(1),");
    strcat(SQL, "Jyuni2                        CHAR(70),");
    strcat(SQL, "Corner3                       CHAR(1),");
    strcat(SQL, "Syukaisu3                     CHAR(1),");
    strcat(SQL, "Jyuni3                        CHAR(70),");
    strcat(SQL, "Corner4                       CHAR(1),");
    strcat(SQL, "Syukaisu4                     CHAR(1),");
    strcat(SQL, "Jyuni4                        CHAR(70),");
    strcat(SQL, "RecordUpKubun                 CHAR(1),");
    strcat(SQL, "KijyunTime                    CHAR(6),");    // 追加
    strcat(SQL, "CONSTRAINT PK_RACE PRIMARY KEY (KeyCord));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "レース詳細(RACE)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("レース詳細(RACE)テーブルを作成しました。\n");
    }

    // 5.馬毎レース情報 (2124 byte)
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS UMA_RACE(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");   // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "Wakuban                       CHAR(1),");
    strcat(SQL, "Umaban                        CHAR(2),");
    strcat(SQL, "KettoNum                      CHAR(10),");
    strcat(SQL, "Bamei                         CHAR(36),");
    strcat(SQL, "UmaKigoCD                     CHAR(2),");
    strcat(SQL, "SexCD                         CHAR(1),");
    strcat(SQL, "HinsyuCD                      CHAR(1),");
    strcat(SQL, "KeiroCD                       CHAR(2),");
    strcat(SQL, "Barei                         CHAR(2),");
    strcat(SQL, "TozaiCD                       CHAR(1),");
    strcat(SQL, "ChokyosiCode                  CHAR(5),");
    strcat(SQL, "ChokyosiRyakusyo              CHAR(12),");   // 8->12
    strcat(SQL, "BanusiCode                    CHAR(6),");
    strcat(SQL, "BanusiName                    CHAR(64),");
    strcat(SQL, "BreederCode                   CHAR(6),");    // 新規
    strcat(SQL, "BreederName                   CHAR(70),");   // 新規
    strcat(SQL, "Fukusyoku                     CHAR(60),");
    strcat(SQL, "reserved1                     CHAR(60),");
    strcat(SQL, "Futan                         CHAR(3),");
    strcat(SQL, "FutanBefore                   CHAR(3),");
    strcat(SQL, "FutanFugo                     CHAR(1),");    // 新規
    strcat(SQL, "FutanZogen                    CHAR(3),");    // 新規
    strcat(SQL, "Blinker                       CHAR(1),");
    strcat(SQL, "reserved2                     CHAR(1),");
    strcat(SQL, "KisyuCode                     CHAR(5),");
    strcat(SQL, "KisyuCodeBefore               CHAR(5),");
    strcat(SQL, "KisyuRyakusyo                 CHAR(12),");   // 8->12
    strcat(SQL, "KisyuRyakusyoBefore           CHAR(12),");   // 8->12
    strcat(SQL, "MinaraiCD                     CHAR(1),");
    strcat(SQL, "MinaraiCDBefore               CHAR(1),");
    strcat(SQL, "BaTaijyu                      CHAR(3),");
    strcat(SQL, "ZogenFugo                     CHAR(1),");
    strcat(SQL, "ZogenSa                       CHAR(3),");
    strcat(SQL, "IJyoCD                        CHAR(1),");
    strcat(SQL, "NyusenJyuni                   CHAR(2),");
    strcat(SQL, "KakuteiJyuni                  CHAR(2),");
    strcat(SQL, "DochakuKubun                  CHAR(1),");
    strcat(SQL, "DochakuTosu                   CHAR(1),");
    strcat(SQL, "[Time]                        CHAR(4),");
    strcat(SQL, "ChakusaCD                     CHAR(3),");
    strcat(SQL, "ChakusaCDP                    CHAR(3),");
    strcat(SQL, "ChakusaCDPP                   CHAR(3),");
    strcat(SQL, "Jyuni1c                       CHAR(2),");
    strcat(SQL, "Jyuni2c                       CHAR(2),");
    strcat(SQL, "Jyuni3c                       CHAR(2),");
    strcat(SQL, "Jyuni4c                       CHAR(2),");
    strcat(SQL, "Odds                          CHAR(4),");
    strcat(SQL, "Ninki                         CHAR(2),");
    strcat(SQL, "OddsFukuL                     CHAR(4),");
    strcat(SQL, "OddsFukuH                     CHAR(4),");
    strcat(SQL, "NinkiFuku                     CHAR(2),");
    strcat(SQL, "Honsyokin                     CHAR(8),");
    strcat(SQL, "Fukasyokin                    CHAR(8),");
    strcat(SQL, "reserved3                     CHAR(3),");
    strcat(SQL, "reserved4                     CHAR(3),");
    strcat(SQL, "HaronTimeL4                   CHAR(3),");
    strcat(SQL, "HaronTimeL3                   CHAR(3),");
    strcat(SQL, "HaronL3Jyuni                  CHAR(2),");    // 追加
    strcat(SQL, "KettoNum1                     CHAR(10),");
    strcat(SQL, "Bamei1                        CHAR(36),");
    strcat(SQL, "KettoNum2                     CHAR(10),");
    strcat(SQL, "Bamei2                        CHAR(36),");
    strcat(SQL, "KettoNum3                     CHAR(10),");
    strcat(SQL, "Bamei3                        CHAR(36),");
    strcat(SQL, "TimeDiff                      CHAR(4),");
    strcat(SQL, "RecordUpKubun                 CHAR(1),");
    strcat(SQL, "DMKubun                       CHAR(1),");
    strcat(SQL, "DMTime                        CHAR(5),");
    strcat(SQL, "DMGosaP                       CHAR(4),");
    strcat(SQL, "DMGosaM                       CHAR(4),");
    strcat(SQL, "DMJyuni                       CHAR(2),");
    strcat(SQL, "TMScore                       CHAR(4),");
    strcat(SQL, "TMJyuni                       CHAR(2),");
    strcat(SQL, "KyakusituKubun                CHAR(1),");
    strcat(SQL, "Tokuten                       CHAR(4),");    // 追加
    strcat(SQL, "TokutenJuni                   CHAR(2),");    // 追加
    strcat(SQL, "Sample                        CHAR(2),");    // 追加
    strcat(SQL, "Zenso                         CHAR(12),");   // 追加
    strcat(SQL, "Jiso                          CHAR(12),");   // 追加
    strcat(SQL, "YosoBante                     CHAR(2),");    // 追加
    strcat(SQL, "YosoTime                      CHAR(5),");    // 追加
    strcat(SQL, "YosoAgari                     CHAR(3),");    // 追加
    strcat(SQL, "LapTime1                      CHAR(3),");    // 追加
    strcat(SQL, "LapTime2                      CHAR(3),");    // 追加
    strcat(SQL, "LapTime3                      CHAR(3),");    // 追加
    strcat(SQL, "LapTime4                      CHAR(3),");    // 追加
    strcat(SQL, "LapTime5                      CHAR(3),");    // 追加
    strcat(SQL, "LapTime6                      CHAR(3),");    // 追加
    strcat(SQL, "LapTime7                      CHAR(3),");    // 追加
    strcat(SQL, "LapTime8                      CHAR(3),");    // 追加
    strcat(SQL, "LapTime9                      CHAR(3),");    // 追加
    strcat(SQL, "LapTime10                     CHAR(3),");    // 追加
    strcat(SQL, "LapTime11                     CHAR(3),");    // 追加
    strcat(SQL, "LapTime12                     CHAR(3),");    // 追加
    strcat(SQL, "YosoMark                      CHAR(4),");    // 追加
    strcat(SQL, "YosoMark2                     CHAR(4),");    // 追加
    strcat(SQL, "YosoMark3                     CHAR(4),");    // 追加
    strcat(SQL, "YosoMark4                     CHAR(4),");    // 追加
    strcat(SQL, "CONSTRAINT PK_UMA_RACE PRIMARY KEY (KeyCord,KettoNum));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "馬毎レース情報(UMA_RACE)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("馬毎レース情報(UMA_RACE)テーブルを作成しました。\n");
    }

    // 6.払戻 (4743 byte)
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS HARAI(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");   // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "TorokuTosu                    CHAR(2),");
    strcat(SQL, "SyussoTosu                    CHAR(2),");
    strcat(SQL, "FuseirituFlag1                CHAR(1),");
    strcat(SQL, "FuseirituFlag2                CHAR(1),");
    strcat(SQL, "FuseirituFlag3                CHAR(1),");
    strcat(SQL, "FuseirituFlag4                CHAR(1),");
    strcat(SQL, "FuseirituFlag5                CHAR(1),");
    strcat(SQL, "FuseirituFlag6                CHAR(1),");
    strcat(SQL, "FuseirituFlag7                CHAR(1),");
    strcat(SQL, "FuseirituFlag8                CHAR(1),");
    strcat(SQL, "FuseirituFlag9                CHAR(1),");
    strcat(SQL, "TokubaraiFlag1                CHAR(1),");
    strcat(SQL, "TokubaraiFlag2                CHAR(1),");
    strcat(SQL, "TokubaraiFlag3                CHAR(1),");
    strcat(SQL, "TokubaraiFlag4                CHAR(1),");
    strcat(SQL, "TokubaraiFlag5                CHAR(1),");
    strcat(SQL, "TokubaraiFlag6                CHAR(1),");
    strcat(SQL, "TokubaraiFlag7                CHAR(1),");
    strcat(SQL, "TokubaraiFlag8                CHAR(1),");
    strcat(SQL, "TokubaraiFlag9                CHAR(1),");
    strcat(SQL, "HenkanFlag1                   CHAR(1),");
    strcat(SQL, "HenkanFlag2                   CHAR(1),");
    strcat(SQL, "HenkanFlag3                   CHAR(1),");
    strcat(SQL, "HenkanFlag4                   CHAR(1),");
    strcat(SQL, "HenkanFlag5                   CHAR(1),");
    strcat(SQL, "HenkanFlag6                   CHAR(1),");
    strcat(SQL, "HenkanFlag7                   CHAR(1),");
    strcat(SQL, "HenkanFlag8                   CHAR(1),");
    strcat(SQL, "HenkanFlag9                   CHAR(1),");
    strcat(SQL, "HenkanUma1                    CHAR(1),");
    strcat(SQL, "HenkanUma2                    CHAR(1),");
    strcat(SQL, "HenkanUma3                    CHAR(1),");
    strcat(SQL, "HenkanUma4                    CHAR(1),");
    strcat(SQL, "HenkanUma5                    CHAR(1),");
    strcat(SQL, "HenkanUma6                    CHAR(1),");
    strcat(SQL, "HenkanUma7                    CHAR(1),");
    strcat(SQL, "HenkanUma8                    CHAR(1),");
    strcat(SQL, "HenkanUma9                    CHAR(1),");
    strcat(SQL, "HenkanUma10                   CHAR(1),");
    strcat(SQL, "HenkanUma11                   CHAR(1),");
    strcat(SQL, "HenkanUma12                   CHAR(1),");
    strcat(SQL, "HenkanUma13                   CHAR(1),");
    strcat(SQL, "HenkanUma14                   CHAR(1),");
    strcat(SQL, "HenkanUma15                   CHAR(1),");
    strcat(SQL, "HenkanUma16                   CHAR(1),");
    strcat(SQL, "HenkanUma17                   CHAR(1),");
    strcat(SQL, "HenkanUma18                   CHAR(1),");
    strcat(SQL, "HenkanUma19                   CHAR(1),");
    strcat(SQL, "HenkanUma20                   CHAR(1),");
    strcat(SQL, "HenkanUma21                   CHAR(1),");
    strcat(SQL, "HenkanUma22                   CHAR(1),");
    strcat(SQL, "HenkanUma23                   CHAR(1),");
    strcat(SQL, "HenkanUma24                   CHAR(1),");
    strcat(SQL, "HenkanUma25                   CHAR(1),");
    strcat(SQL, "HenkanUma26                   CHAR(1),");
    strcat(SQL, "HenkanUma27                   CHAR(1),");
    strcat(SQL, "HenkanUma28                   CHAR(1),");
    strcat(SQL, "HenkanWaku1                   CHAR(1),");
    strcat(SQL, "HenkanWaku2                   CHAR(1),");
    strcat(SQL, "HenkanWaku3                   CHAR(1),");
    strcat(SQL, "HenkanWaku4                   CHAR(1),");
    strcat(SQL, "HenkanWaku5                   CHAR(1),");
    strcat(SQL, "HenkanWaku6                   CHAR(1),");
    strcat(SQL, "HenkanWaku7                   CHAR(1),");
    strcat(SQL, "HenkanWaku8                   CHAR(1),");
    strcat(SQL, "HenkanDoWaku1                 CHAR(1),");
    strcat(SQL, "HenkanDoWaku2                 CHAR(1),");
    strcat(SQL, "HenkanDoWaku3                 CHAR(1),");
    strcat(SQL, "HenkanDoWaku4                 CHAR(1),");
    strcat(SQL, "HenkanDoWaku5                 CHAR(1),");
    strcat(SQL, "HenkanDoWaku6                 CHAR(1),");
    strcat(SQL, "HenkanDoWaku7                 CHAR(1),");
    strcat(SQL, "HenkanDoWaku8                 CHAR(1),");
    strcat(SQL, "PayTansyoUmaban1              CHAR(2),");
    strcat(SQL, "PayTansyoPay1                 CHAR(9),");
    strcat(SQL, "PayTansyoNinki1               CHAR(2),");
    strcat(SQL, "PayTansyoUmaban2              CHAR(2),");
    strcat(SQL, "PayTansyoPay2                 CHAR(9),");
    strcat(SQL, "PayTansyoNinki2               CHAR(2),");
    strcat(SQL, "PayTansyoUmaban3              CHAR(2),");
    strcat(SQL, "PayTansyoPay3                 CHAR(9),");
    strcat(SQL, "PayTansyoNinki3               CHAR(2),");
    strcat(SQL, "PayFukusyoUmaban1             CHAR(2),");
    strcat(SQL, "PayFukusyoPay1                CHAR(9),");
    strcat(SQL, "PayFukusyoNinki1              CHAR(2),");
    strcat(SQL, "PayFukusyoUmaban2             CHAR(2),");
    strcat(SQL, "PayFukusyoPay2                CHAR(9),");
    strcat(SQL, "PayFukusyoNinki2              CHAR(2),");
    strcat(SQL, "PayFukusyoUmaban3             CHAR(2),");
    strcat(SQL, "PayFukusyoPay3                CHAR(9),");
    strcat(SQL, "PayFukusyoNinki3              CHAR(2),");
    strcat(SQL, "PayFukusyoUmaban4             CHAR(2),");
    strcat(SQL, "PayFukusyoPay4                CHAR(9),");
    strcat(SQL, "PayFukusyoNinki4              CHAR(2),");
    strcat(SQL, "PayFukusyoUmaban5             CHAR(2),");
    strcat(SQL, "PayFukusyoPay5                CHAR(9),");
    strcat(SQL, "PayFukusyoNinki5              CHAR(2),");
    strcat(SQL, "PayWakurenKumi1               CHAR(2),");
    strcat(SQL, "PayWakurenPay1                CHAR(9),");
    strcat(SQL, "PayWakurenNinki1              CHAR(2),");
    strcat(SQL, "PayWakurenKumi2               CHAR(2),");
    strcat(SQL, "PayWakurenPay2                CHAR(9),");
    strcat(SQL, "PayWakurenNinki2              CHAR(2),");
    strcat(SQL, "PayWakurenKumi3               CHAR(2),");
    strcat(SQL, "PayWakurenPay3                CHAR(9),");
    strcat(SQL, "PayWakurenNinki3              CHAR(2),");
    strcat(SQL, "PayUmarenKumi1                CHAR(4),");
    strcat(SQL, "PayUmarenPay1                 CHAR(9),");
    strcat(SQL, "PayUmarenNinki1               CHAR(3),");
    strcat(SQL, "PayUmarenKumi2                CHAR(4),");
    strcat(SQL, "PayUmarenPay2                 CHAR(9),");
    strcat(SQL, "PayUmarenNinki2               CHAR(3),");
    strcat(SQL, "PayUmarenKumi3                CHAR(4),");
    strcat(SQL, "PayUmarenPay3                 CHAR(9),");
    strcat(SQL, "PayUmarenNinki3               CHAR(3),");
    strcat(SQL, "PayWideKumi1                  CHAR(4),");
    strcat(SQL, "PayWidePay1                   CHAR(9),");
    strcat(SQL, "PayWideNinki1                 CHAR(3),");
    strcat(SQL, "PayWideKumi2                  CHAR(4),");
    strcat(SQL, "PayWidePay2                   CHAR(9),");
    strcat(SQL, "PayWideNinki2                 CHAR(3),");
    strcat(SQL, "PayWideKumi3                  CHAR(4),");
    strcat(SQL, "PayWidePay3                   CHAR(9),");
    strcat(SQL, "PayWideNinki3                 CHAR(3),");
    strcat(SQL, "PayWideKumi4                  CHAR(4),");
    strcat(SQL, "PayWidePay4                   CHAR(9),");
    strcat(SQL, "PayWideNinki4                 CHAR(3),");
    strcat(SQL, "PayWideKumi5                  CHAR(4),");
    strcat(SQL, "PayWidePay5                   CHAR(9),");
    strcat(SQL, "PayWideNinki5                 CHAR(3),");
    strcat(SQL, "PayWideKumi6                  CHAR(4),");
    strcat(SQL, "PayWidePay6                   CHAR(9),");
    strcat(SQL, "PayWideNinki6                 CHAR(3),");
    strcat(SQL, "PayWideKumi7                  CHAR(4),");
    strcat(SQL, "PayWidePay7                   CHAR(9),");
    strcat(SQL, "PayWideNinki7                 CHAR(3),");
    strcat(SQL, "PayReserved1Kumi1             CHAR(4),");
    strcat(SQL, "PayReserved1Pay1              CHAR(9),");
    strcat(SQL, "PayReserved1Ninki1            CHAR(3),");
    strcat(SQL, "PayReserved1Kumi2             CHAR(4),");
    strcat(SQL, "PayReserved1Pay2              CHAR(9),");
    strcat(SQL, "PayReserved1Ninki2            CHAR(3),");
    strcat(SQL, "PayReserved1Kumi3             CHAR(4),");
    strcat(SQL, "PayReserved1Pay3              CHAR(9),");
    strcat(SQL, "PayReserved1Ninki3            CHAR(3),");
    strcat(SQL, "PayUmatanKumi1                CHAR(4),");
    strcat(SQL, "PayUmatanPay1                 CHAR(9),");
    strcat(SQL, "PayUmatanNinki1               CHAR(3),");
    strcat(SQL, "PayUmatanKumi2                CHAR(4),");
    strcat(SQL, "PayUmatanPay2                 CHAR(9),");
    strcat(SQL, "PayUmatanNinki2               CHAR(3),");
    strcat(SQL, "PayUmatanKumi3                CHAR(4),");
    strcat(SQL, "PayUmatanPay3                 CHAR(9),");
    strcat(SQL, "PayUmatanNinki3               CHAR(3),");
    strcat(SQL, "PayUmatanKumi4                CHAR(4),");
    strcat(SQL, "PayUmatanPay4                 CHAR(9),");
    strcat(SQL, "PayUmatanNinki4               CHAR(3),");
    strcat(SQL, "PayUmatanKumi5                CHAR(4),");
    strcat(SQL, "PayUmatanPay5                 CHAR(9),");
    strcat(SQL, "PayUmatanNinki5               CHAR(3),");
    strcat(SQL, "PayUmatanKumi6                CHAR(4),");
    strcat(SQL, "PayUmatanPay6                 CHAR(9),");
    strcat(SQL, "PayUmatanNinki6               CHAR(3),");
    strcat(SQL, "PaySanrenpukuKumi1            CHAR(6),");
    strcat(SQL, "PaySanrenpukuPay1             CHAR(9),");
    strcat(SQL, "PaySanrenpukuNinki1           CHAR(3),");
    strcat(SQL, "PaySanrenpukuKumi2            CHAR(6),");
    strcat(SQL, "PaySanrenpukuPay2             CHAR(9),");
    strcat(SQL, "PaySanrenpukuNinki2           CHAR(3),");
    strcat(SQL, "PaySanrenpukuKumi3            CHAR(6),");
    strcat(SQL, "PaySanrenpukuPay3             CHAR(9),");
    strcat(SQL, "PaySanrenpukuNinki3           CHAR(3),");
    strcat(SQL, "PaySanrentanKumi1             CHAR(6),");
    strcat(SQL, "PaySanrentanPay1              CHAR(9),");
    strcat(SQL, "PaySanrentanNinki1            CHAR(4),");
    strcat(SQL, "PaySanrentanKumi2             CHAR(6),");
    strcat(SQL, "PaySanrentanPay2              CHAR(9),");
    strcat(SQL, "PaySanrentanNinki2            CHAR(4),");
    strcat(SQL, "PaySanrentanKumi3             CHAR(6),");
    strcat(SQL, "PaySanrentanPay3              CHAR(9),");
    strcat(SQL, "PaySanrentanNinki3            CHAR(4),");
    strcat(SQL, "PaySanrentanKumi4             CHAR(6),");
    strcat(SQL, "PaySanrentanPay4              CHAR(9),");
    strcat(SQL, "PaySanrentanNinki4            CHAR(4),");
    strcat(SQL, "PaySanrentanKumi5             CHAR(6),");
    strcat(SQL, "PaySanrentanPay5              CHAR(9),");
    strcat(SQL, "PaySanrentanNinki5            CHAR(4),");
    strcat(SQL, "PaySanrentanKumi6             CHAR(6),");
    strcat(SQL, "PaySanrentanPay6              CHAR(9),");
    strcat(SQL, "PaySanrentanNinki6            CHAR(4),");
    strcat(SQL, "CONSTRAINT PK_HARAI PRIMARY KEY (KeyCord));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "払戻(HARAI)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("払戻(HARAI)テーブルを作成しました。\n");
    }

    // 7.競走馬マスタ (6695 byte)
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS UMA(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KettoNum                      CHAR(10),");
    strcat(SQL, "DelKubun                      CHAR(1),");
    strcat(SQL, "RegDate                       CHAR(8),");
    strcat(SQL, "DelDate                       CHAR(8),");
    strcat(SQL, "BirthDate                     CHAR(8),");
    strcat(SQL, "Bamei                         CHAR(36),");
    strcat(SQL, "BameiKana                     CHAR(36),");
    strcat(SQL, "BameiEng                      CHAR(80),");
    strcat(SQL, "ZaikyuFlag                    CHAR(1),");
    strcat(SQL, "UmaKigoCD                     CHAR(2),");
    strcat(SQL, "SexCD                         CHAR(1),");
    strcat(SQL, "HinsyuCD                      CHAR(1),");
    strcat(SQL, "KeiroCD                       CHAR(2),");
    strcat(SQL, "Ketto3InfoHansyokuNum1        CHAR(8),");
    strcat(SQL, "Ketto3InfoBamei1              CHAR(36),");
    strcat(SQL, "Ketto3InfoHansyokuNum2        CHAR(8),");
    strcat(SQL, "Ketto3InfoBamei2              CHAR(36),");
    strcat(SQL, "Ketto3InfoHansyokuNum3        CHAR(8),");
    strcat(SQL, "Ketto3InfoBamei3              CHAR(36),");
    strcat(SQL, "Ketto3InfoHansyokuNum4        CHAR(8),");
    strcat(SQL, "Ketto3InfoBamei4              CHAR(36),");
    strcat(SQL, "Ketto3InfoHansyokuNum5        CHAR(8),");
    strcat(SQL, "Ketto3InfoBamei5              CHAR(36),");
    strcat(SQL, "Ketto3InfoHansyokuNum6        CHAR(8),");
    strcat(SQL, "Ketto3InfoBamei6              CHAR(36),");
    strcat(SQL, "Ketto3InfoHansyokuNum7        CHAR(8),");
    strcat(SQL, "Ketto3InfoBamei7              CHAR(36),");
    strcat(SQL, "Ketto3InfoHansyokuNum8        CHAR(8),");
    strcat(SQL, "Ketto3InfoBamei8              CHAR(36),");
    strcat(SQL, "Ketto3InfoHansyokuNum9        CHAR(8),");
    strcat(SQL, "Ketto3InfoBamei9              CHAR(36),");
    strcat(SQL, "Ketto3InfoHansyokuNum10       CHAR(8),");
    strcat(SQL, "Ketto3InfoBamei10             CHAR(36),");
    strcat(SQL, "Ketto3InfoHansyokuNum11       CHAR(8),");
    strcat(SQL, "Ketto3InfoBamei11             CHAR(36),");
    strcat(SQL, "Ketto3InfoHansyokuNum12       CHAR(8),");
    strcat(SQL, "Ketto3InfoBamei12             CHAR(36),");
    strcat(SQL, "Ketto3InfoHansyokuNum13       CHAR(8),");
    strcat(SQL, "Ketto3InfoBamei13             CHAR(36),");
    strcat(SQL, "Ketto3InfoHansyokuNum14       CHAR(8),");
    strcat(SQL, "Ketto3InfoBamei14             CHAR(36),");
    strcat(SQL, "TozaiCD                       CHAR(1),");
    strcat(SQL, "ChokyosiCode                  CHAR(5),");
    strcat(SQL, "ChokyosiRyakusyo              CHAR(12),");    // 8->12
    strcat(SQL, "Syotai                        CHAR(20),");
    strcat(SQL, "BreederCode                   CHAR(6),");
    strcat(SQL, "BreederName                   CHAR(70),");
    strcat(SQL, "SanchiName                    CHAR(20),");
    strcat(SQL, "BanusiCode                    CHAR(6),");
    strcat(SQL, "BanusiName                    CHAR(64),");
    strcat(SQL, "RuikeiHonsyoHeiti             CHAR(9),");
    strcat(SQL, "RuikeiHonsyoSyogai            CHAR(9),");
    strcat(SQL, "RuikeiFukaHeichi              CHAR(9),");
    strcat(SQL, "RuikeiFukaSyogai              CHAR(9),");
    strcat(SQL, "RuikeiSyutokuHeichi           CHAR(9),");
    strcat(SQL, "RuikeiSyutokuSyogai           CHAR(9),");
    strcat(SQL, "SogoChakukaisu1               CHAR(3),");
    strcat(SQL, "SogoChakukaisu2               CHAR(3),");
    strcat(SQL, "SogoChakukaisu3               CHAR(3),");
    strcat(SQL, "SogoChakukaisu4               CHAR(3),");
    strcat(SQL, "SogoChakukaisu5               CHAR(3),");
    strcat(SQL, "SogoChakukaisu6               CHAR(3),");
    strcat(SQL, "ChuoChakukaisu1               CHAR(3),");
    strcat(SQL, "ChuoChakukaisu2               CHAR(3),");
    strcat(SQL, "ChuoChakukaisu3               CHAR(3),");
    strcat(SQL, "ChuoChakukaisu4               CHAR(3),");
    strcat(SQL, "ChuoChakukaisu5               CHAR(3),");
    strcat(SQL, "ChuoChakukaisu6               CHAR(3),");
    strcat(SQL, "Ba1Chakukaisu1                CHAR(3),");
    strcat(SQL, "Ba1Chakukaisu2                CHAR(3),");
    strcat(SQL, "Ba1Chakukaisu3                CHAR(3),");
    strcat(SQL, "Ba1Chakukaisu4                CHAR(3),");
    strcat(SQL, "Ba1Chakukaisu5                CHAR(3),");
    strcat(SQL, "Ba1Chakukaisu6                CHAR(3),");
    strcat(SQL, "Ba2Chakukaisu1                CHAR(3),");
    strcat(SQL, "Ba2Chakukaisu2                CHAR(3),");
    strcat(SQL, "Ba2Chakukaisu3                CHAR(3),");
    strcat(SQL, "Ba2Chakukaisu4                CHAR(3),");
    strcat(SQL, "Ba2Chakukaisu5                CHAR(3),");
    strcat(SQL, "Ba2Chakukaisu6                CHAR(3),");
    strcat(SQL, "Ba3Chakukaisu1                CHAR(3),");
    strcat(SQL, "Ba3Chakukaisu2                CHAR(3),");
    strcat(SQL, "Ba3Chakukaisu3                CHAR(3),");
    strcat(SQL, "Ba3Chakukaisu4                CHAR(3),");
    strcat(SQL, "Ba3Chakukaisu5                CHAR(3),");
    strcat(SQL, "Ba3Chakukaisu6                CHAR(3),");
    strcat(SQL, "Ba4Chakukaisu1                CHAR(3),");
    strcat(SQL, "Ba4Chakukaisu2                CHAR(3),");
    strcat(SQL, "Ba4Chakukaisu3                CHAR(3),");
    strcat(SQL, "Ba4Chakukaisu4                CHAR(3),");
    strcat(SQL, "Ba4Chakukaisu5                CHAR(3),");
    strcat(SQL, "Ba4Chakukaisu6                CHAR(3),");
    strcat(SQL, "Ba5Chakukaisu1                CHAR(3),");
    strcat(SQL, "Ba5Chakukaisu2                CHAR(3),");
    strcat(SQL, "Ba5Chakukaisu3                CHAR(3),");
    strcat(SQL, "Ba5Chakukaisu4                CHAR(3),");
    strcat(SQL, "Ba5Chakukaisu5                CHAR(3),");
    strcat(SQL, "Ba5Chakukaisu6                CHAR(3),");
    strcat(SQL, "Ba6Chakukaisu1                CHAR(3),");
    strcat(SQL, "Ba6Chakukaisu2                CHAR(3),");
    strcat(SQL, "Ba6Chakukaisu3                CHAR(3),");
    strcat(SQL, "Ba6Chakukaisu4                CHAR(3),");
    strcat(SQL, "Ba6Chakukaisu5                CHAR(3),");
    strcat(SQL, "Ba6Chakukaisu6                CHAR(3),");
    strcat(SQL, "Ba7Chakukaisu1                CHAR(3),");
    strcat(SQL, "Ba7Chakukaisu2                CHAR(3),");
    strcat(SQL, "Ba7Chakukaisu3                CHAR(3),");
    strcat(SQL, "Ba7Chakukaisu4                CHAR(3),");
    strcat(SQL, "Ba7Chakukaisu5                CHAR(3),");
    strcat(SQL, "Ba7Chakukaisu6                CHAR(3),");
    strcat(SQL, "Jyotai1Chakukaisu1            CHAR(3),");
    strcat(SQL, "Jyotai1Chakukaisu2            CHAR(3),");
    strcat(SQL, "Jyotai1Chakukaisu3            CHAR(3),");
    strcat(SQL, "Jyotai1Chakukaisu4            CHAR(3),");
    strcat(SQL, "Jyotai1Chakukaisu5            CHAR(3),");
    strcat(SQL, "Jyotai1Chakukaisu6            CHAR(3),");
    strcat(SQL, "Jyotai2Chakukaisu1            CHAR(3),");
    strcat(SQL, "Jyotai2Chakukaisu2            CHAR(3),");
    strcat(SQL, "Jyotai2Chakukaisu3            CHAR(3),");
    strcat(SQL, "Jyotai2Chakukaisu4            CHAR(3),");
    strcat(SQL, "Jyotai2Chakukaisu5            CHAR(3),");
    strcat(SQL, "Jyotai2Chakukaisu6            CHAR(3),");
    strcat(SQL, "Jyotai3Chakukaisu1            CHAR(3),");
    strcat(SQL, "Jyotai3Chakukaisu2            CHAR(3),");
    strcat(SQL, "Jyotai3Chakukaisu3            CHAR(3),");
    strcat(SQL, "Jyotai3Chakukaisu4            CHAR(3),");
    strcat(SQL, "Jyotai3Chakukaisu5            CHAR(3),");
    strcat(SQL, "Jyotai3Chakukaisu6            CHAR(3),");
    strcat(SQL, "Jyotai4Chakukaisu1            CHAR(3),");
    strcat(SQL, "Jyotai4Chakukaisu2            CHAR(3),");
    strcat(SQL, "Jyotai4Chakukaisu3            CHAR(3),");
    strcat(SQL, "Jyotai4Chakukaisu4            CHAR(3),");
    strcat(SQL, "Jyotai4Chakukaisu5            CHAR(3),");
    strcat(SQL, "Jyotai4Chakukaisu6            CHAR(3),");
    strcat(SQL, "Jyotai5Chakukaisu1            CHAR(3),");
    strcat(SQL, "Jyotai5Chakukaisu2            CHAR(3),");
    strcat(SQL, "Jyotai5Chakukaisu3            CHAR(3),");
    strcat(SQL, "Jyotai5Chakukaisu4            CHAR(3),");
    strcat(SQL, "Jyotai5Chakukaisu5            CHAR(3),");
    strcat(SQL, "Jyotai5Chakukaisu6            CHAR(3),");
    strcat(SQL, "Jyotai6Chakukaisu1            CHAR(3),");
    strcat(SQL, "Jyotai6Chakukaisu2            CHAR(3),");
    strcat(SQL, "Jyotai6Chakukaisu3            CHAR(3),");
    strcat(SQL, "Jyotai6Chakukaisu4            CHAR(3),");
    strcat(SQL, "Jyotai6Chakukaisu5            CHAR(3),");
    strcat(SQL, "Jyotai6Chakukaisu6            CHAR(3),");
    strcat(SQL, "Jyotai7Chakukaisu1            CHAR(3),");
    strcat(SQL, "Jyotai7Chakukaisu2            CHAR(3),");
    strcat(SQL, "Jyotai7Chakukaisu3            CHAR(3),");
    strcat(SQL, "Jyotai7Chakukaisu4            CHAR(3),");
    strcat(SQL, "Jyotai7Chakukaisu5            CHAR(3),");
    strcat(SQL, "Jyotai7Chakukaisu6            CHAR(3),");
    strcat(SQL, "Jyotai8Chakukaisu1            CHAR(3),");
    strcat(SQL, "Jyotai8Chakukaisu2            CHAR(3),");
    strcat(SQL, "Jyotai8Chakukaisu3            CHAR(3),");
    strcat(SQL, "Jyotai8Chakukaisu4            CHAR(3),");
    strcat(SQL, "Jyotai8Chakukaisu5            CHAR(3),");
    strcat(SQL, "Jyotai8Chakukaisu6            CHAR(3),");
    strcat(SQL, "Jyotai9Chakukaisu1            CHAR(3),");
    strcat(SQL, "Jyotai9Chakukaisu2            CHAR(3),");
    strcat(SQL, "Jyotai9Chakukaisu3            CHAR(3),");
    strcat(SQL, "Jyotai9Chakukaisu4            CHAR(3),");
    strcat(SQL, "Jyotai9Chakukaisu5            CHAR(3),");
    strcat(SQL, "Jyotai9Chakukaisu6            CHAR(3),");
    strcat(SQL, "Jyotai10Chakukaisu1           CHAR(3),");
    strcat(SQL, "Jyotai10Chakukaisu2           CHAR(3),");
    strcat(SQL, "Jyotai10Chakukaisu3           CHAR(3),");
    strcat(SQL, "Jyotai10Chakukaisu4           CHAR(3),");
    strcat(SQL, "Jyotai10Chakukaisu5           CHAR(3),");
    strcat(SQL, "Jyotai10Chakukaisu6           CHAR(3),");
    strcat(SQL, "Jyotai11Chakukaisu1           CHAR(3),");
    strcat(SQL, "Jyotai11Chakukaisu2           CHAR(3),");
    strcat(SQL, "Jyotai11Chakukaisu3           CHAR(3),");
    strcat(SQL, "Jyotai11Chakukaisu4           CHAR(3),");
    strcat(SQL, "Jyotai11Chakukaisu5           CHAR(3),");
    strcat(SQL, "Jyotai11Chakukaisu6           CHAR(3),");
    strcat(SQL, "Jyotai12Chakukaisu1           CHAR(3),");
    strcat(SQL, "Jyotai12Chakukaisu2           CHAR(3),");
    strcat(SQL, "Jyotai12Chakukaisu3           CHAR(3),");
    strcat(SQL, "Jyotai12Chakukaisu4           CHAR(3),");
    strcat(SQL, "Jyotai12Chakukaisu5           CHAR(3),");
    strcat(SQL, "Jyotai12Chakukaisu6           CHAR(3),");
    strcat(SQL, "Kyori1Chakukaisu1             CHAR(3),");
    strcat(SQL, "Kyori1Chakukaisu2             CHAR(3),");
    strcat(SQL, "Kyori1Chakukaisu3             CHAR(3),");
    strcat(SQL, "Kyori1Chakukaisu4             CHAR(3),");
    strcat(SQL, "Kyori1Chakukaisu5             CHAR(3),");
    strcat(SQL, "Kyori1Chakukaisu6             CHAR(3),");
    strcat(SQL, "Kyori2Chakukaisu1             CHAR(3),");
    strcat(SQL, "Kyori2Chakukaisu2             CHAR(3),");
    strcat(SQL, "Kyori2Chakukaisu3             CHAR(3),");
    strcat(SQL, "Kyori2Chakukaisu4             CHAR(3),");
    strcat(SQL, "Kyori2Chakukaisu5             CHAR(3),");
    strcat(SQL, "Kyori2Chakukaisu6             CHAR(3),");
    strcat(SQL, "Kyori3Chakukaisu1             CHAR(3),");
    strcat(SQL, "Kyori3Chakukaisu2             CHAR(3),");
    strcat(SQL, "Kyori3Chakukaisu3             CHAR(3),");
    strcat(SQL, "Kyori3Chakukaisu4             CHAR(3),");
    strcat(SQL, "Kyori3Chakukaisu5             CHAR(3),");
    strcat(SQL, "Kyori3Chakukaisu6             CHAR(3),");
    strcat(SQL, "Kyori4Chakukaisu1             CHAR(3),");
    strcat(SQL, "Kyori4Chakukaisu2             CHAR(3),");
    strcat(SQL, "Kyori4Chakukaisu3             CHAR(3),");
    strcat(SQL, "Kyori4Chakukaisu4             CHAR(3),");
    strcat(SQL, "Kyori4Chakukaisu5             CHAR(3),");
    strcat(SQL, "Kyori4Chakukaisu6             CHAR(3),");
    strcat(SQL, "Kyori5Chakukaisu1             CHAR(3),");
    strcat(SQL, "Kyori5Chakukaisu2             CHAR(3),");
    strcat(SQL, "Kyori5Chakukaisu3             CHAR(3),");
    strcat(SQL, "Kyori5Chakukaisu4             CHAR(3),");
    strcat(SQL, "Kyori5Chakukaisu5             CHAR(3),");
    strcat(SQL, "Kyori5Chakukaisu6             CHAR(3),");
    strcat(SQL, "Kyori6Chakukaisu1             CHAR(3),");
    strcat(SQL, "Kyori6Chakukaisu2             CHAR(3),");
    strcat(SQL, "Kyori6Chakukaisu3             CHAR(3),");
    strcat(SQL, "Kyori6Chakukaisu4             CHAR(3),");
    strcat(SQL, "Kyori6Chakukaisu5             CHAR(3),");
    strcat(SQL, "Kyori6Chakukaisu6             CHAR(3),");
    strcat(SQL, "Kyakusitu1                    CHAR(3),");
    strcat(SQL, "Kyakusitu2                    CHAR(3),");
    strcat(SQL, "Kyakusitu3                    CHAR(3),");
    strcat(SQL, "Kyakusitu4                    CHAR(3),");
    strcat(SQL, "RaceCount                     CHAR(3),");
    strcat(SQL, "Kisoten1                      CHAR(4),");    // 追加
    strcat(SQL, "Kisoten2                      CHAR(4),");    // 追加
    strcat(SQL, "Kisoten3                      CHAR(4),");    // 追加
    strcat(SQL, "Kisoten4                      CHAR(4),");    // 追加
    strcat(SQL, "Kisoten5                      CHAR(4),");    // 追加
    strcat(SQL, "Kisoten6                      CHAR(4),");    // 追加
    strcat(SQL, "Kisoten7                      CHAR(4),");    // 追加
    strcat(SQL, "Kisoten8                      CHAR(4),");    // 追加
    strcat(SQL, "Kisoten9                      CHAR(4),");    // 追加
    strcat(SQL, "SpeedSiba                     CHAR(6),");    // 追加
    strcat(SQL, "PowerSiba                     CHAR(6),");    // 追加
    strcat(SQL, "SpeedDirt                     CHAR(6),");    // 追加
    strcat(SQL, "PowerDirt                     CHAR(6),");    // 追加
    strcat(SQL, "AnaSisu                       CHAR(2),");    // 追加
    strcat(SQL, "JyosyoSisu                    CHAR(2),");    // 追加
    strcat(SQL, "TekiseiBaTaijyu               CHAR(3),");    // 追加
    strcat(SQL, "CheckMark                     CHAR(2),");    // 追加
    strcat(SQL, "CONSTRAINT PK_UMA PRIMARY KEY (KettoNum));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "競走馬マスタ(UMA)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("競走馬マスタ(UMA)テーブルを作成しました。\n");
    }

    // 8.騎手マスタ (2635 Byte)
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS KISYU(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KisyuCode                     CHAR(5),");
    strcat(SQL, "DelKubun                      CHAR(1),");
    strcat(SQL, "IssueDate                     CHAR(8),");
    strcat(SQL, "DelDate                       CHAR(8),");
    strcat(SQL, "BirthDate                     CHAR(8),");
    strcat(SQL, "KisyuName                     CHAR(34),");
    strcat(SQL, "reserved                      CHAR(34),");
    strcat(SQL, "KisyuNameKana                 CHAR(40),");    // 30->40
    strcat(SQL, "KisyuRyakusyo                 CHAR(12),");    // 8->12
    strcat(SQL, "KisyuNameEng                  CHAR(80),");
    strcat(SQL, "SexCD                         CHAR(1),");
    strcat(SQL, "SikakuCD                      CHAR(1),");
    strcat(SQL, "MinaraiCD                     CHAR(1),");
    strcat(SQL, "TozaiCD                       CHAR(1),");
    strcat(SQL, "Syotai                        CHAR(20),");
    strcat(SQL, "ChokyosiCode                  CHAR(5),");
    strcat(SQL, "ChokyosiRyakusyo              CHAR(12),");    // 8->12
    strcat(SQL, "HatuKiJyo1Hatukijyoid         CHAR(16),");
    strcat(SQL, "HatuKiJyo1SyussoTosu          CHAR(2),");
    strcat(SQL, "HatuKiJyo1KettoNum            CHAR(10),");
    strcat(SQL, "HatuKiJyo1Bamei               CHAR(36),");
    strcat(SQL, "HatuKiJyo1KakuteiJyuni        CHAR(2),");
    strcat(SQL, "HatuKiJyo1IJyoCD              CHAR(1),");
    strcat(SQL, "HatuKiJyo2Hatukijyoid         CHAR(16),");
    strcat(SQL, "HatuKiJyo2SyussoTosu          CHAR(2),");
    strcat(SQL, "HatuKiJyo2KettoNum            CHAR(10),");
    strcat(SQL, "HatuKiJyo2Bamei               CHAR(36),");
    strcat(SQL, "HatuKiJyo2KakuteiJyuni        CHAR(2),");
    strcat(SQL, "HatuKiJyo2IJyoCD              CHAR(1),");
    strcat(SQL, "HatuSyori1Hatusyoriid         CHAR(16),");
    strcat(SQL, "HatuSyori1SyussoTosu          CHAR(2),");
    strcat(SQL, "HatuSyori1KettoNum            CHAR(10),");
    strcat(SQL, "HatuSyori1Bamei               CHAR(36),");
    strcat(SQL, "HatuSyori2Hatusyoriid         CHAR(16),");
    strcat(SQL, "HatuSyori2SyussoTosu          CHAR(2),");
    strcat(SQL, "HatuSyori2KettoNum            CHAR(10),");
    strcat(SQL, "HatuSyori2Bamei               CHAR(36),");
    strcat(SQL, "SaikinJyusyo1SaikinJyusyoid   CHAR(16),");
    strcat(SQL, "SaikinJyusyo1Hondai           CHAR(60),");
    strcat(SQL, "SaikinJyusyo1Ryakusyo10       CHAR(20),");
    strcat(SQL, "SaikinJyusyo1Ryakusyo6        CHAR(12),");
    strcat(SQL, "SaikinJyusyo1Ryakusyo3        CHAR(6),");
    strcat(SQL, "SaikinJyusyo1GradeCD          CHAR(1),");
    strcat(SQL, "SaikinJyusyo1SyussoTosu       CHAR(2),");
    strcat(SQL, "SaikinJyusyo1KettoNum         CHAR(10),");
    strcat(SQL, "SaikinJyusyo1Bamei            CHAR(36),");
    strcat(SQL, "SaikinJyusyo2SaikinJyusyoid   CHAR(16),");
    strcat(SQL, "SaikinJyusyo2Hondai           CHAR(60),");
    strcat(SQL, "SaikinJyusyo2Ryakusyo10       CHAR(20),");
    strcat(SQL, "SaikinJyusyo2Ryakusyo6        CHAR(12),");
    strcat(SQL, "SaikinJyusyo2Ryakusyo3        CHAR(6),");
    strcat(SQL, "SaikinJyusyo2GradeCD          CHAR(1),");
    strcat(SQL, "SaikinJyusyo2SyussoTosu       CHAR(2),");
    strcat(SQL, "SaikinJyusyo2KettoNum         CHAR(10),");
    strcat(SQL, "SaikinJyusyo2Bamei            CHAR(36),");
    strcat(SQL, "SaikinJyusyo3SaikinJyusyoid   CHAR(16),");
    strcat(SQL, "SaikinJyusyo3Hondai           CHAR(60),");
    strcat(SQL, "SaikinJyusyo3Ryakusyo10       CHAR(20),");
    strcat(SQL, "SaikinJyusyo3Ryakusyo6        CHAR(12),");
    strcat(SQL, "SaikinJyusyo3Ryakusyo3        CHAR(6),");
    strcat(SQL, "SaikinJyusyo3GradeCD          CHAR(1),");
    strcat(SQL, "SaikinJyusyo3SyussoTosu       CHAR(2),");
    strcat(SQL, "SaikinJyusyo3KettoNum         CHAR(10),");
    strcat(SQL, "SaikinJyusyo3Bamei            CHAR(36),");
    strcat(SQL, "Maesou1                       CHAR(12),");   // 追加
    strcat(SQL, "Maesou2                       CHAR(12),");   // 追加
    strcat(SQL, "Maesou3                       CHAR(12),");   // 追加
    strcat(SQL, "Maesou4                       CHAR(12),");   // 追加
    strcat(SQL, "Maesou5                       CHAR(12),");   // 追加
    strcat(SQL, "Maesou6                       CHAR(12),");   // 追加
    strcat(SQL, "Maesou7                       CHAR(12),");   // 追加
    strcat(SQL, "Maesou8                       CHAR(12),");   // 追加
    strcat(SQL, "Maesou9                       CHAR(12),");   // 追加
    strcat(SQL, "Maesou10                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou11                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou12                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou13                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou14                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou15                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou16                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou17                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou18                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou19                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou20                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou21                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou22                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou23                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou24                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou25                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou26                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou27                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou28                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou29                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou30                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou31                      CHAR(12),");   // 追加
    strcat(SQL, "Maesou32                      CHAR(12),");   // 追加
    strcat(SQL, "Rank                          CHAR(2),");    // 追加
    strcat(SQL, "AnaSisu                       CHAR(2),");    // 追加
    strcat(SQL, "CONSTRAINT PK_KISYU PRIMARY KEY (KisyuCode));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "騎手マスタ(KISYU)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("騎手マスタ(KISYU)テーブルを作成しました。\n");
    }

    // 9.騎手マスタ_成績(KISYU_SEISEKI)4617 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS KISYU_SEISEKI(");
    strcat(SQL, "KisyuCode                     CHAR(5),");
    strcat(SQL, "Num                           CHAR(1),");
    strcat(SQL, "SetYear                       CHAR(4),");
    strcat(SQL, "KisyuRyakusyo                 CHAR(12),");    // 追加
    strcat(SQL, "HonSyokinHeichi               CHAR(10),");
    strcat(SQL, "HonSyokinSyogai               CHAR(10),");
    strcat(SQL, "FukaSyokinHeichi              CHAR(10),");
    strcat(SQL, "FukaSyokinSyogai              CHAR(10),");
    strcat(SQL, "HeichiChakukaisu1             CHAR(6),");
    strcat(SQL, "HeichiChakukaisu2             CHAR(6),");
    strcat(SQL, "HeichiChakukaisu3             CHAR(6),");
    strcat(SQL, "HeichiChakukaisu4             CHAR(6),");
    strcat(SQL, "HeichiChakukaisu5             CHAR(6),");
    strcat(SQL, "HeichiChakukaisu6             CHAR(6),");
    strcat(SQL, "SyogaiChakukaisu1             CHAR(6),");
    strcat(SQL, "SyogaiChakukaisu2             CHAR(6),");
    strcat(SQL, "SyogaiChakukaisu3             CHAR(6),");
    strcat(SQL, "SyogaiChakukaisu4             CHAR(6),");
    strcat(SQL, "SyogaiChakukaisu5             CHAR(6),");
    strcat(SQL, "SyogaiChakukaisu6             CHAR(6),");
    strcat(SQL, "Jyo1Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo1Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo1Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo1Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo1Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo1Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo2Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo2Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo2Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo2Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo2Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo2Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo3Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo3Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo3Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo3Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo3Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo3Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo4Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo4Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo4Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo4Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo4Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo4Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo5Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo5Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo5Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo5Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo5Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo5Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo6Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo6Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo6Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo6Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo6Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo6Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo7Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo7Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo7Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo7Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo7Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo7Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo8Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo8Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo8Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo8Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo8Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo8Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo9Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo9Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo9Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo9Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo9Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo9Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo10Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo10Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo10Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo10Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo10Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo10Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo11Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo11Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo11Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo11Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo11Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo11Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo12Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo12Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo12Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo12Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo12Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo12Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo13Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo13Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo13Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo13Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo13Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo13Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo14Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo14Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo14Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo14Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo14Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo14Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo15Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo15Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo15Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo15Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo15Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo15Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo16Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo16Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo16Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo16Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo16Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo16Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo17Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo17Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo17Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo17Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo17Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo17Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo18Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo18Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo18Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo18Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo18Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo18Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo19Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo19Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo19Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo19Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo19Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo19Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo20Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo20Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo20Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo20Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo20Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo20Chakukaisu6              CHAR(6),");
    strcat(SQL, "Kyori1Chakukaisu1             CHAR(6),");
    strcat(SQL, "Kyori1Chakukaisu2             CHAR(6),");
    strcat(SQL, "Kyori1Chakukaisu3             CHAR(6),");
    strcat(SQL, "Kyori1Chakukaisu4             CHAR(6),");
    strcat(SQL, "Kyori1Chakukaisu5             CHAR(6),");
    strcat(SQL, "Kyori1Chakukaisu6             CHAR(6),");
    strcat(SQL, "Kyori2Chakukaisu1             CHAR(6),");
    strcat(SQL, "Kyori2Chakukaisu2             CHAR(6),");
    strcat(SQL, "Kyori2Chakukaisu3             CHAR(6),");
    strcat(SQL, "Kyori2Chakukaisu4             CHAR(6),");
    strcat(SQL, "Kyori2Chakukaisu5             CHAR(6),");
    strcat(SQL, "Kyori2Chakukaisu6             CHAR(6),");
    strcat(SQL, "Kyori3Chakukaisu1             CHAR(6),");
    strcat(SQL, "Kyori3Chakukaisu2             CHAR(6),");
    strcat(SQL, "Kyori3Chakukaisu3             CHAR(6),");
    strcat(SQL, "Kyori3Chakukaisu4             CHAR(6),");
    strcat(SQL, "Kyori3Chakukaisu5             CHAR(6),");
    strcat(SQL, "Kyori3Chakukaisu6             CHAR(6),");
    strcat(SQL, "Kyori4Chakukaisu1             CHAR(6),");
    strcat(SQL, "Kyori4Chakukaisu2             CHAR(6),");
    strcat(SQL, "Kyori4Chakukaisu3             CHAR(6),");
    strcat(SQL, "Kyori4Chakukaisu4             CHAR(6),");
    strcat(SQL, "Kyori4Chakukaisu5             CHAR(6),");
    strcat(SQL, "Kyori4Chakukaisu6             CHAR(6),");
    strcat(SQL, "Kyori5Chakukaisu1             CHAR(6),");
    strcat(SQL, "Kyori5Chakukaisu2             CHAR(6),");
    strcat(SQL, "Kyori5Chakukaisu3             CHAR(6),");
    strcat(SQL, "Kyori5Chakukaisu4             CHAR(6),");
    strcat(SQL, "Kyori5Chakukaisu5             CHAR(6),");
    strcat(SQL, "Kyori5Chakukaisu6             CHAR(6),");
    strcat(SQL, "Kyori6Chakukaisu1             CHAR(6),");
    strcat(SQL, "Kyori6Chakukaisu2             CHAR(6),");
    strcat(SQL, "Kyori6Chakukaisu3             CHAR(6),");
    strcat(SQL, "Kyori6Chakukaisu4             CHAR(6),");
    strcat(SQL, "Kyori6Chakukaisu5             CHAR(6),");
    strcat(SQL, "Kyori6Chakukaisu6             CHAR(6),");
    strcat(SQL, "CONSTRAINT PK_KISYU_SEISEKI PRIMARY KEY (KisyuCode,Num));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "騎手マスタ_成績(KISYU_SEISEKI)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("騎手マスタ_成績(KISYU_SEISEKI)テーブルを作成しました。\n");
    }

    // 10.調教師マスタ (2002 byte)
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS CHOKYO(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "ChokyosiCode                  CHAR(5),");
    strcat(SQL, "DelKubun                      CHAR(1),");
    strcat(SQL, "IssueDate                     CHAR(8),");
    strcat(SQL, "DelDate                       CHAR(8),");
    strcat(SQL, "BirthDate                     CHAR(8),");
    strcat(SQL, "ChokyosiName                  CHAR(34),");
    strcat(SQL, "ChokyosiNameKana              CHAR(40),");    // 30->40
    strcat(SQL, "ChokyosiRyakusyo              CHAR(12),");    // 8->12
    strcat(SQL, "ChokyosiNameEng               CHAR(80),");
    strcat(SQL, "SexCD                         CHAR(1),");
    strcat(SQL, "TozaiCD                       CHAR(1),");
    strcat(SQL, "Syotai                        CHAR(20),");
    strcat(SQL, "SaikinJyusyo1SaikinJyusyoid   CHAR(16),");
    strcat(SQL, "SaikinJyusyo1Hondai           CHAR(60),");
    strcat(SQL, "SaikinJyusyo1Ryakusyo10       CHAR(20),");
    strcat(SQL, "SaikinJyusyo1Ryakusyo6        CHAR(12),");
    strcat(SQL, "SaikinJyusyo1Ryakusyo3        CHAR(6),");
    strcat(SQL, "SaikinJyusyo1GradeCD          CHAR(1),");
    strcat(SQL, "SaikinJyusyo1SyussoTosu       CHAR(2),");
    strcat(SQL, "SaikinJyusyo1KettoNum         CHAR(10),");
    strcat(SQL, "SaikinJyusyo1Bamei            CHAR(36),");
    strcat(SQL, "SaikinJyusyo2SaikinJyusyoid   CHAR(16),");
    strcat(SQL, "SaikinJyusyo2Hondai           CHAR(60),");
    strcat(SQL, "SaikinJyusyo2Ryakusyo10       CHAR(20),");
    strcat(SQL, "SaikinJyusyo2Ryakusyo6        CHAR(12),");
    strcat(SQL, "SaikinJyusyo2Ryakusyo3        CHAR(6),");
    strcat(SQL, "SaikinJyusyo2GradeCD          CHAR(1),");
    strcat(SQL, "SaikinJyusyo2SyussoTosu       CHAR(2),");
    strcat(SQL, "SaikinJyusyo2KettoNum         CHAR(10),");
    strcat(SQL, "SaikinJyusyo2Bamei            CHAR(36),");
    strcat(SQL, "SaikinJyusyo3SaikinJyusyoid   CHAR(16),");
    strcat(SQL, "SaikinJyusyo3Hondai           CHAR(60),");
    strcat(SQL, "SaikinJyusyo3Ryakusyo10       CHAR(20),");
    strcat(SQL, "SaikinJyusyo3Ryakusyo6        CHAR(12),");
    strcat(SQL, "SaikinJyusyo3Ryakusyo3        CHAR(6),");
    strcat(SQL, "SaikinJyusyo3GradeCD          CHAR(1),");
    strcat(SQL, "SaikinJyusyo3SyussoTosu       CHAR(2),");
    strcat(SQL, "SaikinJyusyo3KettoNum         CHAR(10),");
    strcat(SQL, "SaikinJyusyo3Bamei            CHAR(36),");
    strcat(SQL, "Maesou1                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou2                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou3                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou4                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou5                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou6                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou7                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou8                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou9                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou10                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou11                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou12                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou13                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou14                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou15                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou16                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou17                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou18                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou19                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou20                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou21                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou22                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou23                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou24                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou25                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou26                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou27                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou28                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou29                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou30                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou31                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou32                      CHAR(22),");   // 追加
    strcat(SQL, "Rank                          CHAR(2),");    // 追加
    strcat(SQL, "AnaSisu                       CHAR(2),");    // 追加
    strcat(SQL, "CONSTRAINT PK_CHOKYO PRIMARY KEY (ChokyosiCode));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "調教師マスタ(CHOKYO)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("調教師マスタ(CHOKYO)テーブルを作成しました。\n");
    }

    // 11.調教師マスタ_成績(CHOKYO_SEISEKI)6751 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS CHOKYO_SEISEKI(");
    strcat(SQL, "ChokyosiCode                  CHAR(5),");
    strcat(SQL, "Num                           CHAR(1),");
    strcat(SQL, "SetYear                       CHAR(4),");
    strcat(SQL, "ChokyosiRyakusyo              CHAR(12),");
    strcat(SQL, "HonSyokinHeichi               CHAR(10),");
    strcat(SQL, "HonSyokinSyogai               CHAR(10),");
    strcat(SQL, "FukaSyokinHeichi              CHAR(10),");
    strcat(SQL, "FukaSyokinSyogai              CHAR(10),");
    strcat(SQL, "HeichiChakukaisu1             CHAR(6),");
    strcat(SQL, "HeichiChakukaisu2             CHAR(6),");
    strcat(SQL, "HeichiChakukaisu3             CHAR(6),");
    strcat(SQL, "HeichiChakukaisu4             CHAR(6),");
    strcat(SQL, "HeichiChakukaisu5             CHAR(6),");
    strcat(SQL, "HeichiChakukaisu6             CHAR(6),");
    strcat(SQL, "SyogaiChakukaisu1             CHAR(6),");
    strcat(SQL, "SyogaiChakukaisu2             CHAR(6),");
    strcat(SQL, "SyogaiChakukaisu3             CHAR(6),");
    strcat(SQL, "SyogaiChakukaisu4             CHAR(6),");
    strcat(SQL, "SyogaiChakukaisu5             CHAR(6),");
    strcat(SQL, "SyogaiChakukaisu6             CHAR(6),");
    strcat(SQL, "Jyo1Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo1Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo1Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo1Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo1Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo1Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo2Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo2Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo2Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo2Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo2Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo2Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo3Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo3Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo3Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo3Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo3Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo3Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo4Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo4Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo4Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo4Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo4Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo4Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo5Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo5Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo5Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo5Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo5Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo5Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo6Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo6Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo6Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo6Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo6Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo6Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo7Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo7Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo7Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo7Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo7Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo7Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo8Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo8Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo8Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo8Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo8Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo8Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo9Chakukaisu1               CHAR(6),");
    strcat(SQL, "Jyo9Chakukaisu2               CHAR(6),");
    strcat(SQL, "Jyo9Chakukaisu3               CHAR(6),");
    strcat(SQL, "Jyo9Chakukaisu4               CHAR(6),");
    strcat(SQL, "Jyo9Chakukaisu5               CHAR(6),");
    strcat(SQL, "Jyo9Chakukaisu6               CHAR(6),");
    strcat(SQL, "Jyo10Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo10Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo10Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo10Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo10Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo10Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo11Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo11Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo11Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo11Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo11Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo11Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo12Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo12Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo12Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo12Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo12Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo12Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo13Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo13Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo13Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo13Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo13Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo13Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo14Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo14Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo14Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo14Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo14Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo14Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo15Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo15Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo15Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo15Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo15Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo15Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo16Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo16Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo16Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo16Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo16Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo16Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo17Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo17Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo17Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo17Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo17Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo17Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo18Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo18Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo18Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo18Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo18Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo18Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo19Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo19Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo19Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo19Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo19Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo19Chakukaisu6              CHAR(6),");
    strcat(SQL, "Jyo20Chakukaisu1              CHAR(6),");
    strcat(SQL, "Jyo20Chakukaisu2              CHAR(6),");
    strcat(SQL, "Jyo20Chakukaisu3              CHAR(6),");
    strcat(SQL, "Jyo20Chakukaisu4              CHAR(6),");
    strcat(SQL, "Jyo20Chakukaisu5              CHAR(6),");
    strcat(SQL, "Jyo20Chakukaisu6              CHAR(6),");
    strcat(SQL, "Kyori1Chakukaisu1             CHAR(6),");
    strcat(SQL, "Kyori1Chakukaisu2             CHAR(6),");
    strcat(SQL, "Kyori1Chakukaisu3             CHAR(6),");
    strcat(SQL, "Kyori1Chakukaisu4             CHAR(6),");
    strcat(SQL, "Kyori1Chakukaisu5             CHAR(6),");
    strcat(SQL, "Kyori1Chakukaisu6             CHAR(6),");
    strcat(SQL, "Kyori2Chakukaisu1             CHAR(6),");
    strcat(SQL, "Kyori2Chakukaisu2             CHAR(6),");
    strcat(SQL, "Kyori2Chakukaisu3             CHAR(6),");
    strcat(SQL, "Kyori2Chakukaisu4             CHAR(6),");
    strcat(SQL, "Kyori2Chakukaisu5             CHAR(6),");
    strcat(SQL, "Kyori2Chakukaisu6             CHAR(6),");
    strcat(SQL, "Kyori3Chakukaisu1             CHAR(6),");
    strcat(SQL, "Kyori3Chakukaisu2             CHAR(6),");
    strcat(SQL, "Kyori3Chakukaisu3             CHAR(6),");
    strcat(SQL, "Kyori3Chakukaisu4             CHAR(6),");
    strcat(SQL, "Kyori3Chakukaisu5             CHAR(6),");
    strcat(SQL, "Kyori3Chakukaisu6             CHAR(6),");
    strcat(SQL, "Kyori4Chakukaisu1             CHAR(6),");
    strcat(SQL, "Kyori4Chakukaisu2             CHAR(6),");
    strcat(SQL, "Kyori4Chakukaisu3             CHAR(6),");
    strcat(SQL, "Kyori4Chakukaisu4             CHAR(6),");
    strcat(SQL, "Kyori4Chakukaisu5             CHAR(6),");
    strcat(SQL, "Kyori4Chakukaisu6             CHAR(6),");
    strcat(SQL, "Kyori5Chakukaisu1             CHAR(6),");
    strcat(SQL, "Kyori5Chakukaisu2             CHAR(6),");
    strcat(SQL, "Kyori5Chakukaisu3             CHAR(6),");
    strcat(SQL, "Kyori5Chakukaisu4             CHAR(6),");
    strcat(SQL, "Kyori5Chakukaisu5             CHAR(6),");
    strcat(SQL, "Kyori5Chakukaisu6             CHAR(6),");
    strcat(SQL, "Kyori6Chakukaisu1             CHAR(6),");
    strcat(SQL, "Kyori6Chakukaisu2             CHAR(6),");
    strcat(SQL, "Kyori6Chakukaisu3             CHAR(6),");
    strcat(SQL, "Kyori6Chakukaisu4             CHAR(6),");
    strcat(SQL, "Kyori6Chakukaisu5             CHAR(6),");
    strcat(SQL, "Kyori6Chakukaisu6             CHAR(6),");
    strcat(SQL, "CONSTRAINT PK_CHOKYO_SEISEKI PRIMARY KEY (ChokyosiCode,Num));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "調教師マスタ_成績(CHOKYO_SEISEKI)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("調教師マスタ_成績(CHOKYO_SEISEKI)テーブルを作成しました。\n");
    }

    // 12.生産者マスタ 1361 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS SEISAN(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "BreederCode                   CHAR(6),");
    strcat(SQL, "BreederName_Co                CHAR(70),");
    strcat(SQL, "BreederName                   CHAR(70),");
    strcat(SQL, "BreederNameKana               CHAR(70),");
    strcat(SQL, "BreederNameEng                CHAR(168),");
    strcat(SQL, "Address                       CHAR(20),");
    strcat(SQL, "H_SetYear                     CHAR(4),");
    strcat(SQL, "H_HonSyokinTotal              CHAR(10),");
    strcat(SQL, "H_FukaSyokin                  CHAR(10),");
    strcat(SQL, "H_ChakuKaisu1                 CHAR(6),");
    strcat(SQL, "H_ChakuKaisu2                 CHAR(6),");
    strcat(SQL, "H_ChakuKaisu3                 CHAR(6),");
    strcat(SQL, "H_ChakuKaisu4                 CHAR(6),");
    strcat(SQL, "H_ChakuKaisu5                 CHAR(6),");
    strcat(SQL, "H_ChakuKaisu6                 CHAR(6),");
    strcat(SQL, "R_SetYear                     CHAR(4),");
    strcat(SQL, "R_HonSyokinTotal              CHAR(10),");
    strcat(SQL, "R_FukaSyokin                  CHAR(10),");
    strcat(SQL, "R_ChakuKaisu1                 CHAR(6),");
    strcat(SQL, "R_ChakuKaisu2                 CHAR(6),");
    strcat(SQL, "R_ChakuKaisu3                 CHAR(6),");
    strcat(SQL, "R_ChakuKaisu4                 CHAR(6),");
    strcat(SQL, "R_ChakuKaisu5                 CHAR(6),");
    strcat(SQL, "R_ChakuKaisu6                 CHAR(6),");
    strcat(SQL, "Maesou1                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou2                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou3                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou4                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou5                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou6                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou7                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou8                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou9                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou10                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou11                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou12                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou13                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou14                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou15                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou16                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou17                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou18                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou19                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou20                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou21                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou22                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou23                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou24                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou25                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou26                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou27                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou28                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou29                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou30                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou31                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou32                      CHAR(22),");   // 追加
    strcat(SQL, "Rank                          CHAR(2),");    // 追加
    strcat(SQL, "AnaSisu                       CHAR(2),");    // 追加
    strcat(SQL, "CONSTRAINT PK_SEISAN PRIMARY KEY (BreederCode));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "生産者マスタ(SEISAN)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("生産者マスタ(SEISAN)テーブルを作成しました。\n");
    }

    // 13.馬主マスタ 1360 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS BANUSI(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "BanusiCode                    CHAR(6),");
    strcat(SQL, "BanusiName_Co                 CHAR(64),");
    strcat(SQL, "BanusiName                    CHAR(64),");
    strcat(SQL, "BanusiNameKana                CHAR(64),");    // 50->64
    strcat(SQL, "BanusiNameEng                 CHAR(100),");
    strcat(SQL, "Fukusyoku                     CHAR(60),");
    strcat(SQL, "H_SetYear                     CHAR(4),");
    strcat(SQL, "H_HonSyokinTotal              CHAR(10),");
    strcat(SQL, "H_FukaSyokin                  CHAR(10),");
    strcat(SQL, "H_ChakuKaisu1                 CHAR(6),");
    strcat(SQL, "H_ChakuKaisu2                 CHAR(6),");
    strcat(SQL, "H_ChakuKaisu3                 CHAR(6),");
    strcat(SQL, "H_ChakuKaisu4                 CHAR(6),");
    strcat(SQL, "H_ChakuKaisu5                 CHAR(6),");
    strcat(SQL, "H_ChakuKaisu6                 CHAR(6),");
    strcat(SQL, "R_SetYear                     CHAR(4),");
    strcat(SQL, "R_HonSyokinTotal              CHAR(10),");
    strcat(SQL, "R_FukaSyokin                  CHAR(10),");
    strcat(SQL, "R_ChakuKaisu1                 CHAR(6),");
    strcat(SQL, "R_ChakuKaisu2                 CHAR(6),");
    strcat(SQL, "R_ChakuKaisu3                 CHAR(6),");
    strcat(SQL, "R_ChakuKaisu4                 CHAR(6),");
    strcat(SQL, "R_ChakuKaisu5                 CHAR(6),");
    strcat(SQL, "R_ChakuKaisu6                 CHAR(6),");
    strcat(SQL, "Maesou1                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou2                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou3                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou4                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou5                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou6                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou7                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou8                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou9                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou10                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou11                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou12                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou13                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou14                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou15                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou16                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou17                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou18                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou19                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou20                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou21                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou22                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou23                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou24                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou25                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou26                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou27                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou28                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou29                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou30                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou31                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou32                      CHAR(22),");   // 追加
    strcat(SQL, "Rank                          CHAR(2),");    // 追加
    strcat(SQL, "AnaSisu                       CHAR(2),");    // 追加
    strcat(SQL, "CONSTRAINT PK_BANUSI PRIMARY KEY (BanusiCode));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "馬主マスタ(BANUSI)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("馬主マスタ(BANUSI)テーブルを作成しました。\n");
    }

    // 14.繁殖馬マスタ 1139 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS HANSYOKU(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "HansyokuNum                   CHAR(8),");
    strcat(SQL, "reserved                      CHAR(8),");
    strcat(SQL, "KettoNum                      CHAR(10),");
    strcat(SQL, "DelKubun                      CHAR(1),");
    strcat(SQL, "Bamei                         CHAR(36),");
    strcat(SQL, "BameiKana                     CHAR(40),");
    strcat(SQL, "BameiEng                      CHAR(80),");
    strcat(SQL, "BirthYear                     CHAR(4),");
    strcat(SQL, "SexCD                         CHAR(1),");
    strcat(SQL, "HinsyuCD                      CHAR(1),");
    strcat(SQL, "KeiroCD                       CHAR(2),");
    strcat(SQL, "HansyokuMochiKubun            CHAR(1),");
    strcat(SQL, "ImportYear                    CHAR(4),");
    strcat(SQL, "SanchiName                    CHAR(20),");
    strcat(SQL, "HansyokuFNum                  CHAR(8),");
    strcat(SQL, "HansyokuMNum                  CHAR(8),");
    strcat(SQL, "Maesou1                       CHAR(22),");    // 追加
    strcat(SQL, "Maesou2                       CHAR(22),");    // 追加
    strcat(SQL, "Maesou3                       CHAR(22),");    // 追加
    strcat(SQL, "Maesou4                       CHAR(22),");    // 追加
    strcat(SQL, "Maesou5                       CHAR(22),");    // 追加
    strcat(SQL, "Maesou6                       CHAR(22),");    // 追加
    strcat(SQL, "Maesou7                       CHAR(22),");    // 追加
    strcat(SQL, "Maesou8                       CHAR(22),");    // 追加
    strcat(SQL, "Maesou9                       CHAR(22),");    // 追加
    strcat(SQL, "Maesou10                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou11                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou12                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou13                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou14                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou15                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou16                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou17                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou18                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou19                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou20                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou21                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou22                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou23                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou24                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou25                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou26                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou27                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou28                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou29                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou30                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou31                      CHAR(22),");    // 追加
    strcat(SQL, "Maesou32                      CHAR(22),");    // 追加
    strcat(SQL, "Rank                          CHAR(2),");     // 追加
    strcat(SQL, "AnaSisu                       CHAR(2),");     // 追加
    strcat(SQL, "CONSTRAINT PK_HANSYOKU PRIMARY KEY (HansyokuNum));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "繁殖馬マスタ(HANSYOKU)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("繁殖馬マスタ(HANSYOKU)テーブルを作成しました。\n");
    }

    // 15.産駒マスタ 1233 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS SANKU(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KettoNum                      CHAR(10),");
    strcat(SQL, "BirthDate                     CHAR(8),");
    strcat(SQL, "SexCD                         CHAR(1),");
    strcat(SQL, "HinsyuCD                      CHAR(1),");
    strcat(SQL, "KeiroCD                       CHAR(2),");
    strcat(SQL, "SankuMochiKubun               CHAR(1),");
    strcat(SQL, "ImportYear                    CHAR(4),");
    strcat(SQL, "BreederCode                   CHAR(6),");
    strcat(SQL, "SanchiName                    CHAR(20),");
    strcat(SQL, "FNum                          CHAR(8),");
    strcat(SQL, "MNum                          CHAR(8),");
    strcat(SQL, "FFNum                         CHAR(8),");
    strcat(SQL, "FMNum                         CHAR(8),");
    strcat(SQL, "MFNum                         CHAR(8),");
    strcat(SQL, "MMNum                         CHAR(8),");
    strcat(SQL, "FFFNum                        CHAR(8),");
    strcat(SQL, "FFMNum                        CHAR(8),");
    strcat(SQL, "FMFNum                        CHAR(8),");
    strcat(SQL, "FMMNum                        CHAR(8),");
    strcat(SQL, "MFFNum                        CHAR(8),");
    strcat(SQL, "MFMNum                        CHAR(8),");
    strcat(SQL, "MMFNum                        CHAR(8),");
    strcat(SQL, "MMMNum                        CHAR(8),");
    strcat(SQL, "Maesou1                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou2                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou3                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou4                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou5                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou6                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou7                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou8                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou9                       CHAR(22),");   // 追加
    strcat(SQL, "Maesou10                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou11                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou12                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou13                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou14                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou15                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou16                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou17                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou18                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou19                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou20                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou21                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou22                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou23                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou24                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou25                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou26                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou27                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou28                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou29                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou30                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou31                      CHAR(22),");   // 追加
    strcat(SQL, "Maesou32                      CHAR(22),");   // 追加
    strcat(SQL, "Rank                          CHAR(2),");    // 追加
    strcat(SQL, "AnaSisu                       CHAR(2),");    // 追加
    strcat(SQL, "CONSTRAINT PK_SANKU PRIMARY KEY (KettoNum));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "産駒マスタ(SANKU)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("産駒マスタ(SANKU)テーブルを作成しました。\n");
    }

    // 16.Record 1278 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS RECORD (");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(21),");  // 追加
    strcat(SQL, "Recinfokubun                  CHAR(1),");
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "Tokunum                       CHAR(4),");
    strcat(SQL, "Hondai                        CHAR(60),");
    strcat(SQL, "GradeCD                       CHAR(1),");
    strcat(SQL, "SyubetuCD                     CHAR(2),");
    strcat(SQL, "Kyori                         CHAR(4),");
    strcat(SQL, "TrackCD                       CHAR(2),");
    strcat(SQL, "Reckubun                      CHAR(1),");
    strcat(SQL, "Rectime                       CHAR(4),");
    strcat(SQL, "TenkoCD                       CHAR(1),");
    strcat(SQL, "SibaBabaCD                    CHAR(1),");
    strcat(SQL, "DirtBabaCD                    CHAR(1),");
    strcat(SQL, "Recumakettonum1               CHAR(10),");
    strcat(SQL, "Recumabamei1                  CHAR(36),");
    strcat(SQL, "RecumaumakigoCD1              CHAR(2),");
    strcat(SQL, "RecumasexCD1                  CHAR(1),");
    strcat(SQL, "Recumachokyosicode1           CHAR(5),");
    strcat(SQL, "Recumachokyosiname1           CHAR(34),");
    strcat(SQL, "Recumafutan1                  CHAR(3),");
    strcat(SQL, "Recumakisyucode1              CHAR(5),");
    strcat(SQL, "Recumakisyuname1              CHAR(34),");
    strcat(SQL, "Recumakettonum2               CHAR(10),");
    strcat(SQL, "Recumabamei2                  CHAR(36),");
    strcat(SQL, "RecumaumakigoCD2              CHAR(2),");
    strcat(SQL, "RecumasexCD2                  CHAR(1),");
    strcat(SQL, "Recumachokyosicode2           CHAR(5),");
    strcat(SQL, "Recumachokyosiname2           CHAR(34),");
    strcat(SQL, "Recumafutan2                  CHAR(3),");
    strcat(SQL, "Recumakisyucode2              CHAR(5),");
    strcat(SQL, "Recumakisyuname2              CHAR(34),");
    strcat(SQL, "Recumakettonum3               CHAR(10),");
    strcat(SQL, "Recumabamei3                  CHAR(36),");
    strcat(SQL, "RecumaumakigoCD3              CHAR(2),");
    strcat(SQL, "RecumasexCD3                  CHAR(1),");
    strcat(SQL, "Recumachokyosicode3           CHAR(5),");
    strcat(SQL, "Recumachokyosiname3           CHAR(34),");
    strcat(SQL, "Recumafutan3                  CHAR(3),");
    strcat(SQL, "Recumakisyucode3              CHAR(5),");
    strcat(SQL, "Recumakisyuname3              CHAR(34),");
    strcat(SQL, "CONSTRAINT PK_RECORD PRIMARY KEY (KeyCord));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "レコード(RECORD)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("レコード(RECORD)テーブルを作成しました。\n");
    }

    // 17.年間スケジュール 1402 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS SCHEDULE (");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(10),");
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "YoubiCD                       CHAR(1),");
    strcat(SQL, "Jyusyo1TokuNum                CHAR(4),");
    strcat(SQL, "Jyusyo1Hondai                 CHAR(60),");
    strcat(SQL, "Jyusyo1Ryakusyo10             CHAR(20),");
    strcat(SQL, "Jyusyo1Ryakusyo6              CHAR(12),");
    strcat(SQL, "Jyusyo1Ryakusyo3              CHAR(6),");
    strcat(SQL, "Jyusyo1Nkai                   CHAR(3),");
    strcat(SQL, "Jyusyo1GradeCD                CHAR(1),");
    strcat(SQL, "Jyusyo1SyubetuCD              CHAR(2),");
    strcat(SQL, "Jyusyo1KigoCD                 CHAR(3),");
    strcat(SQL, "Jyusyo1JyuryoCD               CHAR(1),");
    strcat(SQL, "Jyusyo1Kyori                  CHAR(4),");
    strcat(SQL, "Jyusyo1TrackCD                CHAR(2),");
    strcat(SQL, "Jyusyo2TokuNum                CHAR(4),");
    strcat(SQL, "Jyusyo2Hondai                 CHAR(60),");
    strcat(SQL, "Jyusyo2Ryakusyo10             CHAR(20),");
    strcat(SQL, "Jyusyo2Ryakusyo6              CHAR(12),");
    strcat(SQL, "Jyusyo2Ryakusyo3              CHAR(6),");
    strcat(SQL, "Jyusyo2Nkai                   CHAR(3),");
    strcat(SQL, "Jyusyo2GradeCD                CHAR(1),");
    strcat(SQL, "Jyusyo2SyubetuCD              CHAR(2),");
    strcat(SQL, "Jyusyo2KigoCD                 CHAR(3),");
    strcat(SQL, "Jyusyo2JyuryoCD               CHAR(1),");
    strcat(SQL, "Jyusyo2Kyori                  CHAR(4),");
    strcat(SQL, "Jyusyo2TrackCD                CHAR(2),");
    strcat(SQL, "Jyusyo3TokuNum                CHAR(4),");
    strcat(SQL, "Jyusyo3Hondai                 CHAR(60),");
    strcat(SQL, "Jyusyo3Ryakusyo10             CHAR(20),");
    strcat(SQL, "Jyusyo3Ryakusyo6              CHAR(12),");
    strcat(SQL, "Jyusyo3Ryakusyo3              CHAR(6),");
    strcat(SQL, "Jyusyo3Nkai                   CHAR(3),");
    strcat(SQL, "Jyusyo3GradeCD                CHAR(1),");
    strcat(SQL, "Jyusyo3SyubetuCD              CHAR(2),");
    strcat(SQL, "Jyusyo3KigoCD                 CHAR(3),");
    strcat(SQL, "Jyusyo3JyuryoCD               CHAR(1),");
    strcat(SQL, "Jyusyo3Kyori                  CHAR(4),");
    strcat(SQL, "Jyusyo3TrackCD                CHAR(2),");
    strcat(SQL, "RaceOmo                       CHAR(20),");  // 追加
    strcat(SQL, "Race1                         CHAR(12),");  // 追加
    strcat(SQL, "Race2                         CHAR(12),");  // 追加
    strcat(SQL, "Race3                         CHAR(12),");  // 追加
    strcat(SQL, "Race4                         CHAR(12),");  // 追加
    strcat(SQL, "Race5                         CHAR(12),");  // 追加
    strcat(SQL, "Race6                         CHAR(12),");  // 追加
    strcat(SQL, "Race7                         CHAR(12),");  // 追加
    strcat(SQL, "Race8                         CHAR(12),");  // 追加
    strcat(SQL, "Race9                         CHAR(12),");  // 追加
    strcat(SQL, "Race10                        CHAR(12),");  // 追加
    strcat(SQL, "Race11                        CHAR(12),");  // 追加
    strcat(SQL, "Race12                        CHAR(12),");  // 追加
    strcat(SQL, "CONSTRAINT PK_SCHEDULE PRIMARY KEY (KeyCord));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "年間スケジュール(SCHEDULE)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("年間スケジュール(SCHEDULE)テーブルを作成しました。\n");
    }

    // オッズ_単複枠(ODDS_TANPUKUWAKU) 589 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS ODDS_TANPUKUWAKU(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");  // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "HappyoTime                    CHAR(8),");
    strcat(SQL, "TorokuTosu                    CHAR(2),");
    strcat(SQL, "SyussoTosu                    CHAR(2),");
    strcat(SQL, "TansyoFlag                    CHAR(1),");
    strcat(SQL, "FukusyoFlag                   CHAR(1),");
    strcat(SQL, "WakurenFlag                   CHAR(1),");
    strcat(SQL, "FukuChakuBaraiKey             CHAR(1),");
    strcat(SQL, "TotalHyosuTansyo              CHAR(11),");
    strcat(SQL, "TotalHyosuFukusyo             CHAR(11),");
    strcat(SQL, "TotalHyosuWakuren             CHAR(11),");
    strcat(SQL, "TanData                       CHAR(224),");
    strcat(SQL, "FukuData                      CHAR(336),");
    strcat(SQL, "WakuData                      CHAR(324),");
    strcat(SQL, "CONSTRAINT PK_ODDS_TANPUKUWAKU PRIMARY KEY (KeyCord));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "オッズ_単複枠(ODDS_TANPUKUWAKU)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("オッズ_単複枠(ODDS_TANPUKUWAKU)テーブルを作成しました。\n");
    }

    // オッズ_馬連(ODDS_UMAREN)419 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS ODDS_UMAREN(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");  // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "HappyoTime                    CHAR(8),");
    strcat(SQL, "TorokuTosu                    CHAR(2),");
    strcat(SQL, "SyussoTosu                    CHAR(2),");
    strcat(SQL, "UmarenFlag                    CHAR(1),");
    strcat(SQL, "TotalHyosuUmaren              CHAR(11),");
    strcat(SQL, "Data                          CHAR(1989),");
    strcat(SQL, "CONSTRAINT PK_ODDS_UMAREN PRIMARY KEY (KeyCord));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "オッズ_馬連(ODDS_UMAREN)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("オッズ_馬連(ODDS_UMAREN)テーブルを作成しました。\n");
    }

    // オッズ_ワイド(ODDS_WIDE)414 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS ODDS_WIDE(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");  // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "HappyoTime                    CHAR(8),");
    strcat(SQL, "TorokuTosu                    CHAR(2),");
    strcat(SQL, "SyussoTosu                    CHAR(2),");
    strcat(SQL, "WideFlag                      CHAR(1),");
    strcat(SQL, "TotalHyosuWide                CHAR(11),");
    strcat(SQL, "Data                          CHAR(2601),");
    strcat(SQL, "CONSTRAINT PK_ODDS_WIDE PRIMARY KEY (KeyCord));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "オッズ_ワイド(ODDS_WIDE)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("オッズ_ワイド(ODDS_WIDE)テーブルを作成しました。\n");
    }

    // オッズ_馬単(ODDS_UMATAN)419 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS ODDS_UMATAN(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");  // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "HappyoTime                    CHAR(8),");
    strcat(SQL, "TorokuTosu                    CHAR(2),");
    strcat(SQL, "SyussoTosu                    CHAR(2),");
    strcat(SQL, "UmatanFlag                    CHAR(1),");
    strcat(SQL, "TotalHyosuUmatan              CHAR(11),");
    strcat(SQL, "Data                          CHAR(3978),");
    strcat(SQL, "CONSTRAINT PK_ODDS_UMATAN PRIMARY KEY (KeyCord));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "オッズ_馬単(ODDS_UMATAN)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("オッズ_馬単(ODDS_UMATAN)テーブルを作成しました。\n");
    }

    // オッズ_3連複(ODDS_SANREN)420 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS ODDS_SANREN(");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),"); // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "HappyoTime                    CHAR(8),");
    strcat(SQL, "TorokuTosu                    CHAR(2),");
    strcat(SQL, "SyussoTosu                    CHAR(2),");
    strcat(SQL, "SanrenFlag                    CHAR(1),");
    strcat(SQL, "TotalHyosuSanren              CHAR(11),");
    strcat(SQL, "Data                          CHAR(12240),");
    strcat(SQL, "CONSTRAINT PK_ODDS_SANREN PRIMARY KEY (KeyCord));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "オッズ_3連複(ODDS_SANREN)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("オッズ_3連複(ODDS_SANREN)テーブルを作成しました。\n");
    }

    // 坂路調教データ 417 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS HANRO (");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "TresenKubun                   CHAR(1),");
    strcat(SQL, "TresenMei                     CHAR(1),");
    strcat(SQL, "ChokyoDate                    CHAR(8),");
    strcat(SQL, "ChokyosiCode                  CHAR(5),");
    strcat(SQL, "ChokyosiRyakusyo              CHAR(12),");
    strcat(SQL, "ChokyoTime                    CHAR(4),");
    strcat(SQL, "KettoNum                      CHAR(10),");
    strcat(SQL, "Bamei                         CHAR(36),");
    strcat(SQL, "HaronTime4                    CHAR(4),");
    strcat(SQL, "LapTime4                      CHAR(3),");
    strcat(SQL, "HaronTime3                    CHAR(4),");
    strcat(SQL, "LapTime3                      CHAR(3),");
    strcat(SQL, "HaronTime2                    CHAR(4),");
    strcat(SQL, "LapTime2                      CHAR(3),");
    strcat(SQL, "LapTime1                      CHAR(3),");
    strcat(SQL, "Tyumokudo                     CHAR(2),");  // 新規
    strcat(SQL, "CONSTRAINT PK_HANRO PRIMARY KEY (TresenKubun,ChokyoDate,ChokyoTime,KettoNum));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "坂路調教データ(HANRO)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("坂路調教データ(HANRO)テーブルを作成しました。\n");
    }

    // Sale    376 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS SALE (");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "Kettonum                      CHAR(10),");
    strcat(SQL, "Hansyokufnum                  CHAR(8),");
    strcat(SQL, "Hansyokumnum                  CHAR(8),");
    strcat(SQL, "Birthyear                     CHAR(4),");
    strcat(SQL, "Salecode                      CHAR(6),");
    strcat(SQL, "Salehostname                  CHAR(40),");
    strcat(SQL, "Salename                      CHAR(80),");
    strcat(SQL, "Fromdate                      CHAR(8),");
    strcat(SQL, "Todate                        CHAR(8),");
    strcat(SQL, "Barei                         CHAR(1),");
    strcat(SQL, "Price                         CHAR(10),");
    strcat(SQL, "CONSTRAINT PK_SALE PRIMARY KEY (Kettonum,Salecode,Fromdate));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "セールデータ(SALE)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("セールデータ(SALE)テーブルを作成しました。\n");
    }

    // 2.馬名の意味由来(BAMEIORIGIN)204 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS BAMEIORIGIN (");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "Kettonum                      CHAR(10),");
    strcat(SQL, "Bamei                         CHAR(36),");
    strcat(SQL, "Origin                        CHAR(64),");
    strcat(SQL, "CONSTRAINT PK_BAMEIORIGIN PRIMARY KEY (Kettonum));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "馬名の意味由来データ(BAMEIORIGIN)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("馬名の意味由来データ(BAMEIORIGIN)テーブルを作成しました。\n");
    }

    rc = sqlite3_open("Umachan_Hyosu.db", &db);    // データベースファイルを作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "Umachan_Hyosu の作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    }

    // 票数データ 1746 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS HYOSU1 (");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");   // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "TorokuTosu                    CHAR(2),");
    strcat(SQL, "SyussoTosu                    CHAR(2),");
    strcat(SQL, "HatubaiFlag1                  CHAR(1),");
    strcat(SQL, "HatubaiFlag2                  CHAR(1),");
    strcat(SQL, "HatubaiFlag3                  CHAR(1),");
    strcat(SQL, "HatubaiFlag4                  CHAR(1),");
    strcat(SQL, "HatubaiFlag5                  CHAR(1),");
    strcat(SQL, "HatubaiFlag6                  CHAR(1),");
    strcat(SQL, "HatubaiFlag7                  CHAR(1),");
    strcat(SQL, "FukuChakuBaraiKey             CHAR(1),");
    strcat(SQL, "HenkanUma1                    CHAR(1),");
    strcat(SQL, "HenkanUma2                    CHAR(1),");
    strcat(SQL, "HenkanUma3                    CHAR(1),");
    strcat(SQL, "HenkanUma4                    CHAR(1),");
    strcat(SQL, "HenkanUma5                    CHAR(1),");
    strcat(SQL, "HenkanUma6                    CHAR(1),");
    strcat(SQL, "HenkanUma7                    CHAR(1),");
    strcat(SQL, "HenkanUma8                    CHAR(1),");
    strcat(SQL, "HenkanUma9                    CHAR(1),");
    strcat(SQL, "HenkanUma10                   CHAR(1),");
    strcat(SQL, "HenkanUma11                   CHAR(1),");
    strcat(SQL, "HenkanUma12                   CHAR(1),");
    strcat(SQL, "HenkanUma13                   CHAR(1),");
    strcat(SQL, "HenkanUma14                   CHAR(1),");
    strcat(SQL, "HenkanUma15                   CHAR(1),");
    strcat(SQL, "HenkanUma16                   CHAR(1),");
    strcat(SQL, "HenkanUma17                   CHAR(1),");
    strcat(SQL, "HenkanUma18                   CHAR(1),");
    strcat(SQL, "HenkanUma19                   CHAR(1),");
    strcat(SQL, "HenkanUma20                   CHAR(1),");
    strcat(SQL, "HenkanUma21                   CHAR(1),");
    strcat(SQL, "HenkanUma22                   CHAR(1),");
    strcat(SQL, "HenkanUma23                   CHAR(1),");
    strcat(SQL, "HenkanUma24                   CHAR(1),");
    strcat(SQL, "HenkanUma25                   CHAR(1),");
    strcat(SQL, "HenkanUma26                   CHAR(1),");
    strcat(SQL, "HenkanUma27                   CHAR(1),");
    strcat(SQL, "HenkanUma28                   CHAR(1),");
    strcat(SQL, "HenkanWaku1                   CHAR(1),");
    strcat(SQL, "HenkanWaku2                   CHAR(1),");
    strcat(SQL, "HenkanWaku3                   CHAR(1),");
    strcat(SQL, "HenkanWaku4                   CHAR(1),");
    strcat(SQL, "HenkanWaku5                   CHAR(1),");
    strcat(SQL, "HenkanWaku6                   CHAR(1),");
    strcat(SQL, "HenkanWaku7                   CHAR(1),");
    strcat(SQL, "HenkanWaku8                   CHAR(1),");
    strcat(SQL, "HenkanDoWaku1                 CHAR(1),");
    strcat(SQL, "HenkanDoWaku2                 CHAR(1),");
    strcat(SQL, "HenkanDoWaku3                 CHAR(1),");
    strcat(SQL, "HenkanDoWaku4                 CHAR(1),");
    strcat(SQL, "HenkanDoWaku5                 CHAR(1),");
    strcat(SQL, "HenkanDoWaku6                 CHAR(1),");
    strcat(SQL, "HenkanDoWaku7                 CHAR(1),");
    strcat(SQL, "HenkanDoWaku8                 CHAR(1),");
    strcat(SQL, "TanHyo                        CHAR(420),");
    strcat(SQL, "FukuHyo                       CHAR(420),");
    strcat(SQL, "WakukuHyo                     CHAR(540),");
    strcat(SQL, "UmarenHyo                     CHAR(2754),");
    strcat(SQL, "WideHyo                       CHAR(2754),");
    strcat(SQL, "UmatanHyo                     CHAR(5508),");
    strcat(SQL, "SanrenpukuHyo                 CHAR(16320),");
    strcat(SQL, "HyoTotal1                     CHAR(11),");
    strcat(SQL, "HyoTotal2                     CHAR(11),");
    strcat(SQL, "HyoTotal3                     CHAR(11),");
    strcat(SQL, "HyoTotal4                     CHAR(11),");
    strcat(SQL, "HyoTotal5                     CHAR(11),");
    strcat(SQL, "HyoTotal6                     CHAR(11),");
    strcat(SQL, "HyoTotal7                     CHAR(11),");
    strcat(SQL, "HyoTotal8                     CHAR(11),");
    strcat(SQL, "HyoTotal9                     CHAR(11),");
    strcat(SQL, "HyoTotal10                    CHAR(11),");
    strcat(SQL, "HyoTotal11                    CHAR(11),");
    strcat(SQL, "HyoTotal12                    CHAR(11),");
    strcat(SQL, "HyoTotal13                    CHAR(11),");
    strcat(SQL, "HyoTotal14                    CHAR(11),");
    strcat(SQL, "CONSTRAINT PK_HYOSU1 PRIMARY KEY (KeyCord));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "票数データ1(HYOSU1)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("票数データ1(HYOSU1)テーブルを作成しました。\n");
    }

    // 票数データ 928 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS HYOSU6 (");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");   // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "TorokuTosu                    CHAR(2),");
    strcat(SQL, "SyussoTosu                    CHAR(2),");
    strcat(SQL, "HatubaiFlag1                  CHAR(1),");
    strcat(SQL, "HenkanUma1                    CHAR(1),");
    strcat(SQL, "HenkanUma2                    CHAR(1),");
    strcat(SQL, "HenkanUma3                    CHAR(1),");
    strcat(SQL, "HenkanUma4                    CHAR(1),");
    strcat(SQL, "HenkanUma5                    CHAR(1),");
    strcat(SQL, "HenkanUma6                    CHAR(1),");
    strcat(SQL, "HenkanUma7                    CHAR(1),");
    strcat(SQL, "HenkanUma8                    CHAR(1),");
    strcat(SQL, "HenkanUma9                    CHAR(1),");
    strcat(SQL, "HenkanUma10                   CHAR(1),");
    strcat(SQL, "HenkanUma11                   CHAR(1),");
    strcat(SQL, "HenkanUma12                   CHAR(1),");
    strcat(SQL, "HenkanUma13                   CHAR(1),");
    strcat(SQL, "HenkanUma14                   CHAR(1),");
    strcat(SQL, "HenkanUma15                   CHAR(1),");
    strcat(SQL, "HenkanUma16                   CHAR(1),");
    strcat(SQL, "HenkanUma17                   CHAR(1),");
    strcat(SQL, "HenkanUma18                   CHAR(1),");
    strcat(SQL, "SanrentanHyo                  CHAR(102816),");
    strcat(SQL, "HyoTotal1                     CHAR(11),");
    strcat(SQL, "HyoTotal2                     CHAR(11),");
    strcat(SQL, "CONSTRAINT PK_HYOSU6 PRIMARY KEY (KeyCord));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "票数データ6(HYOSU6)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("票数データ6(HYOSU6)テーブルを作成しました。\n");
    }

    rc = sqlite3_open("Umachan_Sanrentan.db", &db);    // データベースファイルを作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "Umachan_Sanrentan.db の作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    }

    // オッズ_3連単(ODDS_SANRENTAN)429 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS ODDS_SANRENTAN (");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");  // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "HappyoTime                    CHAR(8),");
    strcat(SQL, "TorokuTosu                    CHAR(2),");
    strcat(SQL, "SyussoTosu                    CHAR(2),");
    strcat(SQL, "SanrentanFlag                 CHAR(1),");
    strcat(SQL, "TotalHyosuSanrentan           CHAR(11),");
    strcat(SQL, "Data                          CHAR(83232),");
    strcat(SQL, "CONSTRAINT PK_ODDS_SANRENTAN PRIMARY KEY (KeyCord));");
    rc = sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "オッズ_3連単(ODDS_SANRENTAN)テーブルの作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    } else {
        printf("オッズ_3連単(ODDS_SANRENTAN)テーブルを作成しました。\n");
    }

    rc = sqlite3_open("Umachan_Henko.db", &db);    // データベースファイルを作成

    if (rc != SQLITE_OK){
        MessageBox( NULL, "Umachan_Henko.db の作成に失敗しました。", "馬ちゃんのメッセージ", MB_OK );
        return 0;
    }

    // 3.馬体重(BATAIJYU)2082 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS BATAIJYU (");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");  // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "HappyoTime                    CHAR(8),");
    strcat(SQL, "Umaban1                       CHAR(2),");
    strcat(SQL, "Bamei1                        CHAR(36),");
    strcat(SQL, "BaTaijyu1                     CHAR(3),");
    strcat(SQL, "ZogenFugo1                    CHAR(1),");
    strcat(SQL, "ZogenSa1                      CHAR(3),");
    strcat(SQL, "Umaban2                       CHAR(2),");
    strcat(SQL, "Bamei2                        CHAR(36),");
    strcat(SQL, "BaTaijyu2                     CHAR(3),");
    strcat(SQL, "ZogenFugo2                    CHAR(1),");
    strcat(SQL, "ZogenSa2                      CHAR(3),");
    strcat(SQL, "Umaban3                       CHAR(2),");
    strcat(SQL, "Bamei3                        CHAR(36),");
    strcat(SQL, "BaTaijyu3                     CHAR(3),");
    strcat(SQL, "ZogenFugo3                    CHAR(1),");
    strcat(SQL, "ZogenSa3                      CHAR(3),");
    strcat(SQL, "Umaban4                       CHAR(2),");
    strcat(SQL, "Bamei4                        CHAR(36),");
    strcat(SQL, "BaTaijyu4                     CHAR(3),");
    strcat(SQL, "ZogenFugo4                    CHAR(1),");
    strcat(SQL, "ZogenSa4                      CHAR(3),");
    strcat(SQL, "Umaban5                       CHAR(2),");
    strcat(SQL, "Bamei5                        CHAR(36),");
    strcat(SQL, "BaTaijyu5                     CHAR(3),");
    strcat(SQL, "ZogenFugo5                    CHAR(1),");
    strcat(SQL, "ZogenSa5                      CHAR(3),");
    strcat(SQL, "Umaban6                       CHAR(2),");
    strcat(SQL, "Bamei6                        CHAR(36),");
    strcat(SQL, "BaTaijyu6                     CHAR(3),");
    strcat(SQL, "ZogenFugo6                    CHAR(1),");
    strcat(SQL, "ZogenSa6                      CHAR(3),");
    strcat(SQL, "Umaban7                       CHAR(2),");
    strcat(SQL, "Bamei7                        CHAR(36),");
    strcat(SQL, "BaTaijyu7                     CHAR(3),");
    strcat(SQL, "ZogenFugo7                    CHAR(1),");
    strcat(SQL, "ZogenSa7                      CHAR(3),");
    strcat(SQL, "Umaban8                       CHAR(2),");
    strcat(SQL, "Bamei8                        CHAR(36),");
    strcat(SQL, "BaTaijyu8                     CHAR(3),");
    strcat(SQL, "ZogenFugo8                    CHAR(1),");
    strcat(SQL, "ZogenSa8                      CHAR(3),");
    strcat(SQL, "Umaban9                       CHAR(2),");
    strcat(SQL, "Bamei9                        CHAR(36),");
    strcat(SQL, "BaTaijyu9                     CHAR(3),");
    strcat(SQL, "ZogenFugo9                    CHAR(1),");
    strcat(SQL, "ZogenSa9                      CHAR(3),");
    strcat(SQL, "Umaban10                      CHAR(2),");
    strcat(SQL, "Bamei10                       CHAR(36),");
    strcat(SQL, "BaTaijyu10                    CHAR(3),");
    strcat(SQL, "ZogenFugo10                   CHAR(1),");
    strcat(SQL, "ZogenSa10                     CHAR(3),");
    strcat(SQL, "Umaban11                      CHAR(2),");
    strcat(SQL, "Bamei11                       CHAR(36),");
    strcat(SQL, "BaTaijyu11                    CHAR(3),");
    strcat(SQL, "ZogenFugo11                   CHAR(1),");
    strcat(SQL, "ZogenSa11                     CHAR(3),");
    strcat(SQL, "Umaban12                      CHAR(2),");
    strcat(SQL, "Bamei12                       CHAR(36),");
    strcat(SQL, "BaTaijyu12                    CHAR(3),");
    strcat(SQL, "ZogenFugo12                   CHAR(1),");
    strcat(SQL, "ZogenSa12                     CHAR(3),");
    strcat(SQL, "Umaban13                      CHAR(2),");
    strcat(SQL, "Bamei13                       CHAR(36),");
    strcat(SQL, "BaTaijyu13                    CHAR(3),");
    strcat(SQL, "ZogenFugo13                   CHAR(1),");
    strcat(SQL, "ZogenSa13                     CHAR(3),");
    strcat(SQL, "Umaban14                      CHAR(2),");
    strcat(SQL, "Bamei14                       CHAR(36),");
    strcat(SQL, "BaTaijyu14                    CHAR(3),");
    strcat(SQL, "ZogenFugo14                   CHAR(1),");
    strcat(SQL, "ZogenSa14                     CHAR(3),");
    strcat(SQL, "Umaban15                      CHAR(2),");
    strcat(SQL, "Bamei15                       CHAR(36),");
    strcat(SQL, "BaTaijyu15                    CHAR(3),");
    strcat(SQL, "ZogenFugo15                   CHAR(1),");
    strcat(SQL, "ZogenSa15                     CHAR(3),");
    strcat(SQL, "Umaban16                      CHAR(2),");
    strcat(SQL, "Bamei16                       CHAR(36),");
    strcat(SQL, "BaTaijyu16                    CHAR(3),");
    strcat(SQL, "ZogenFugo16                   CHAR(1),");
    strcat(SQL, "ZogenSa16                     CHAR(3),");
    strcat(SQL, "Umaban17                      CHAR(2),");
    strcat(SQL, "Bamei17                       CHAR(36),");
    strcat(SQL, "BaTaijyu17                    CHAR(3),");
    strcat(SQL, "ZogenFugo17                   CHAR(1),");
    strcat(SQL, "ZogenSa17                     CHAR(3),");
    strcat(SQL, "Umaban18                      CHAR(2),");
    strcat(SQL, "Bamei18                       CHAR(36),");
    strcat(SQL, "BaTaijyu18                    CHAR(3),");
    strcat(SQL, "ZogenFugo18                   CHAR(1),");
    strcat(SQL, "ZogenSa18                     CHAR(3),");
    strcat(SQL, "CONSTRAINT PK_BATAIJYU PRIMARY KEY (KeyCord));");
    sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    printf("速報:馬体重データ(BATAIJYU)テーブルを作成しました。\n");

    // 4.天候馬場状態(TENKO_BABA)464 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS TENKO_BABA (");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(10),");  // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "HappyoTime                    CHAR(8),");
    strcat(SQL, "HenkoID                       CHAR(1),");
    strcat(SQL, "AtoTenkoCD                    CHAR(1),");
    strcat(SQL, "AtoSibaBabaCD                 CHAR(1),");
    strcat(SQL, "AtoDirtBabaCD                 CHAR(1),");
    strcat(SQL, "MaeTenkoCD                    CHAR(1),");
    strcat(SQL, "MaeSibaBabaCD                 CHAR(1),");
    strcat(SQL, "MaeDirtBabaCD                 CHAR(1),");
    strcat(SQL, "CONSTRAINT PK_TENKO_BABA PRIMARY KEY (KeyCord,HappyoTime,HenkoID));");
    sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    printf("速報:天候馬場状態データ(TENKO_BABA)テーブルを作成しました。\n");

    // 5.出走取消・競走除外(TORIKESI_JYOGAI)379 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS TORIKESI_JYOGAI (");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");  // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "HappyoTime                    CHAR(8),");
    strcat(SQL, "Umaban                        CHAR(2),");
    strcat(SQL, "Bamei                         CHAR(36),");
    strcat(SQL, "JiyuKubun                     CHAR(3),");
    strcat(SQL, "CONSTRAINT PK_TORIKESI_JYOGAI PRIMARY KEY (KeyCord,Umaban));");
    sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    printf("速報:出走取消・競走除外データ(TORIKESI_JYOGAI)テーブルを作成しました。\n");

    // 6.騎手変更(KISYU_CHANGE)539 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS KISYU_CHANGE (");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");  // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "HappyoTime                    CHAR(8),");
    strcat(SQL, "Umaban                        CHAR(2),");
    strcat(SQL, "Bamei                         CHAR(36),");
    strcat(SQL, "AtoFutan                      CHAR(3),");
    strcat(SQL, "AtoKisyuCode                  CHAR(5),");
    strcat(SQL, "AtoKisyuName                  CHAR(34),");
    strcat(SQL, "AtoMinaraiCD                  CHAR(1),");
    strcat(SQL, "MaeFutan                      CHAR(3),");
    strcat(SQL, "MaeKisyuCode                  CHAR(5),");
    strcat(SQL, "MaeKisyuName                  CHAR(34),");
    strcat(SQL, "MaeMinaraiCD                  CHAR(1),");
    strcat(SQL, "CONSTRAINT PK_KISYU_CHANGE PRIMARY KEY (KeyCord,HappyoTime,Umaban));");
    sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    printf("速報:騎手変更データ(KISYU_CHANGE)テーブルを作成しました。\n");

    // 7.発走時刻変更(HASSOU_CHANGE)402 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS HASSOU_CHANGE (");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");  // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "HappyoTime                    CHAR(8),");
    strcat(SQL, "AtoJi                         CHAR(2),");
    strcat(SQL, "AtoFun                        CHAR(2),");
    strcat(SQL, "MaeJi                         CHAR(2),");
    strcat(SQL, "MaeFun                        CHAR(2),");
    strcat(SQL, "CONSTRAINT PK_HASSOU_JIKOKU_CHANGE PRIMARY KEY (KeyCord,HappyoTime));");
    sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    printf("速報:発走時刻変更データ(HASSOU_JIKOKU_CHANGE)テーブルを作成しました。\n");

    // 8.コース変更(COURSE_CHANGE)425 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS COURSE_CHANGE (");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");  // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "HappyoTime                    CHAR(8),");
    strcat(SQL, "AtoKyori                      CHAR(4),");
    strcat(SQL, "AtoTruckCD                    CHAR(2),");
    strcat(SQL, "MaeKyori                      CHAR(4),");
    strcat(SQL, "MaeTruckCD                    CHAR(2),");
    strcat(SQL, "JiyuCD                        CHAR(6),");
    strcat(SQL, "CONSTRAINT PK_COURSE_CHANGE PRIMARY KEY (KeyCord,HappyoTime));");
    sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成

    printf("速報:コース変更データ(COURSE_CHANGE)テーブルを作成しました。\n");

    // 9.データマイニング予想(MINING)1672 byte
    strcpy(SQL, "CREATE TABLE IF NOT EXISTS MINING (");
    strcat(SQL, "RecordSpec                    CHAR(2),");
    strcat(SQL, "DataKubun                     CHAR(1),");
    strcat(SQL, "MakeDate                      CHAR(8),");
    strcat(SQL, "KeyCord                       CHAR(12),");  // 追加
    strcat(SQL, "[Year]                        CHAR(4),");
    strcat(SQL, "MonthDay                      CHAR(4),");
    strcat(SQL, "JyoCD                         CHAR(2),");
    strcat(SQL, "Kaiji                         CHAR(2),");
    strcat(SQL, "Nichiji                       CHAR(2),");
    strcat(SQL, "RaceNum                       CHAR(2),");
    strcat(SQL, "MakeHM                        CHAR(4),");
    strcat(SQL, "Umaban1                       CHAR(2),");
    strcat(SQL, "DMTime1                       CHAR(5),");
    strcat(SQL, "DMGosaP1                      CHAR(4),");
    strcat(SQL, "DMGosaM1                      CHAR(4),");
    strcat(SQL, "Umaban2                       CHAR(2),");
    strcat(SQL, "DMTime2                       CHAR(5),");
    strcat(SQL, "DMGosaP2                      CHAR(4),");
    strcat(SQL, "DMGosaM2                      CHAR(4),");
    strcat(SQL, "Umaban3                       CHAR(2),");
    strcat(SQL, "DMTime3                       CHAR(5),");
    strcat(SQL, "DMGosaP3                      CHAR(4),");
    strcat(SQL, "DMGosaM3                      CHAR(4),");
    strcat(SQL, "Umaban4                       CHAR(2),");
    strcat(SQL, "DMTime4                       CHAR(5),");
    strcat(SQL, "DMGosaP4                      CHAR(4),");
    strcat(SQL, "DMGosaM4                      CHAR(4),");
    strcat(SQL, "Umaban5                       CHAR(2),");
    strcat(SQL, "DMTime5                       CHAR(5),");
    strcat(SQL, "DMGosaP5                      CHAR(4),");
    strcat(SQL, "DMGosaM5                      CHAR(4),");
    strcat(SQL, "Umaban6                       CHAR(2),");
    strcat(SQL, "DMTime6                       CHAR(5),");
    strcat(SQL, "DMGosaP6                      CHAR(4),");
    strcat(SQL, "DMGosaM6                      CHAR(4),");
    strcat(SQL, "Umaban7                       CHAR(2),");
    strcat(SQL, "DMTime7                       CHAR(5),");
    strcat(SQL, "DMGosaP7                      CHAR(4),");
    strcat(SQL, "DMGosaM7                      CHAR(4),");
    strcat(SQL, "Umaban8                       CHAR(2),");
    strcat(SQL, "DMTime8                       CHAR(5),");
    strcat(SQL, "DMGosaP8                      CHAR(4),");
    strcat(SQL, "DMGosaM8                      CHAR(4),");
    strcat(SQL, "Umaban9                       CHAR(2),");
    strcat(SQL, "DMTime9                       CHAR(5),");
    strcat(SQL, "DMGosaP9                      CHAR(4),");
    strcat(SQL, "DMGosaM9                      CHAR(4),");
    strcat(SQL, "Umaban10                      CHAR(2),");
    strcat(SQL, "DMTime10                      CHAR(5),");
    strcat(SQL, "DMGosaP10                     CHAR(4),");
    strcat(SQL, "DMGosaM10                     CHAR(4),");
    strcat(SQL, "Umaban11                      CHAR(2),");
    strcat(SQL, "DMTime11                      CHAR(5),");
    strcat(SQL, "DMGosaP11                     CHAR(4),");
    strcat(SQL, "DMGosaM11                     CHAR(4),");
    strcat(SQL, "Umaban12                      CHAR(2),");
    strcat(SQL, "DMTime12                      CHAR(5),");
    strcat(SQL, "DMGosaP12                     CHAR(4),");
    strcat(SQL, "DMGosaM12                     CHAR(4),");
    strcat(SQL, "Umaban13                      CHAR(2),");
    strcat(SQL, "DMTime13                      CHAR(5),");
    strcat(SQL, "DMGosaP13                     CHAR(4),");
    strcat(SQL, "DMGosaM13                     CHAR(4),");
    strcat(SQL, "Umaban14                      CHAR(2),");
    strcat(SQL, "DMTime14                      CHAR(5),");
    strcat(SQL, "DMGosaP14                     CHAR(4),");
    strcat(SQL, "DMGosaM14                     CHAR(4),");
    strcat(SQL, "Umaban15                      CHAR(2),");
    strcat(SQL, "DMTime15                      CHAR(5),");
    strcat(SQL, "DMGosaP15                     CHAR(4),");
    strcat(SQL, "DMGosaM15                     CHAR(4),");
    strcat(SQL, "Umaban16                      CHAR(2),");
    strcat(SQL, "DMTime16                      CHAR(5),");
    strcat(SQL, "DMGosaP16                     CHAR(4),");
    strcat(SQL, "DMGosaM16                     CHAR(4),");
    strcat(SQL, "Umaban17                      CHAR(2),");
    strcat(SQL, "DMTime17                      CHAR(5),");
    strcat(SQL, "DMGosaP17                     CHAR(4),");
    strcat(SQL, "DMGosaM17                     CHAR(4),");
    strcat(SQL, "Umaban18                      CHAR(2),");
    strcat(SQL, "DMTime18                      CHAR(5),");
    strcat(SQL, "DMGosaP18                     CHAR(4),");
    strcat(SQL, "DMGosaM18                     CHAR(4),");
    strcat(SQL, "CONSTRAINT PK_MINING PRIMARY KEY (KeyCord));");
    sqlite3_exec(db, SQL, NULL, NULL, &err);    // テーブル作成
    sqlite3_close(db);

    printf("速報:データマイニング予想(MINING)テーブルを作成しました。\n");

    printf("\nデータベースの構築とテーブルの作成を終了しました。\n");
    Sleep(2500);

    // データベースファイルを閉じる
    FreeLibrary(hDll);                          // sqlite3.dll解放
    return 0;
}

上記のコードで作成した SQLite_JRAVAN.zip を用意致しました。 VS2005 をお持ちであれば、そのままコンパイル出来ます。
SQLite の最新バージョン(Version 3.30.1)でコンパイル出来る事は確認しておりますが、作成したデータベースが問題なく動作するかどうかの検証は不足しております。

もし、問題が出るようであれば、作成年月は古いのですが、上記の内容でコンパイルした実行ファイルと、その他のプログラム一式を 「馬吉の解析」 から ダウンロード できます。
JRA-VAN の「JRA-VAN データラボ」に御加入の方なら、実際にデータベースを構築したり、データベースの内容を御覧になることが出来ます。
但し、「JRA-VAN データラボ」からデータを得るには、月額 2,090円(税込)が必要ですので、競馬に興味の無い方にはお薦め致しません。
 


 SQLiteの日本語の扱い

SQLite を使用する上で避けて通れないのが日本語の扱いについてです。
まず、SQLiteで扱う文字コードが UTF-8 で、Windowsで扱う文字コードが Shift-JIS であることが問題になります。 SQLite は文字コードの切り換えが出来るので、 Shift-JIS に変更すれば良いだろうと考える人も居ると思いますが、SQLite では Shift-JIS のコードは扱えないようです。 私が SQLite に登録する競馬データは日本語ですので、Shift-JIS の状態で登録されますから、そのまま読み込んだ場合には文字化けしてしまいます。 そこで、SQLite の ODBC 通してコード変換をしていたのですが、著名な SQLite ODBC Driver のドライバーでは、UTF-8 のままなので、 SQLite ODBC ドライバ 0.83 日本語対応版 のページから、 sqlite3odbc-0.83.zip をダウンロードして、どこかに展開しておきます。

次に、著名な SQLite ODBC Driver をインストールします。バージョンは、一番上にある sqliteodbc.exe (32bit)を選択します。
SQLite ODBC Driver のインストール後に、日本語対応の sqlite3odbc-0.83.zip を展開して出てきた、sqlite3odbc.dll (2009/08/23) と入れ替えます。
SQLite ODBC Driver でインストールした sqlite3odbc.dll は、どこにあるのかですが、OS が32bit の場合は、C:\Windows\System32 のファルダの中にあります。
OS が64bit の場合は、 C:\Windows\SysWOW64 のフォルダの中にありますので、それと入れ替えます。 入れ替える前のファイルは、将来戻す場合も考えて、削除しないで名前を変更しておくのが良いと思います。 尚、OS が64bit の場合は、C:\Windows\System32 のファルダの中にも同じファイルが作成されているそうですから、同様に入れ替えておいた方が良いかも知れません。(動作には関係ないと思いますが)

SQLite を競馬データベースとしてのみ使用するのであれば、このやり方で不満は出ないと思いますが、やはりメジャーなやり方ではないような気はします。
そこで、SQLite にデータを登録する時点で、 UTF-8 に変換したらどうなるのかを試したくなるでしょう。
UTF-8 に変換するとデータベースがどのぐらい肥大するのかとか、動作速度はどうなのかです。


 SJISとUTF8の漢字コード変換

サイトを調べてみると、SJISからUTF8へ、あるいは逆に、UTF8からSJISへのコード変換をする関数がありました。これを使えば、わざわざ ODBC を通す必要は無さそうです。
私がお世話になったのは、 Hatada's Home Page 様のサイトです。 最近の広告だらけのサイトばかりを見ていると、反吐(へど)が出そうになりますが、このようなサイトに巡り合うと、砂漠の中のオアシスにたどり着いた気分になります。


1.WideCharToMultiByte関数


int WideCharToMultiByte(
  UINT CodePage,            // コードページ
  DWORD dwFlags,            // 処理速度とマッピング方法を決定するフラグ
  LPCWSTR lpWideCharStr,    // ワイド文字列のアドレス
  int cchWideChar,          // ワイド文字列の文字数
  LPSTR lpMultiByteStr,     // 新しい文字列を受け取るバッファのアドレス
  int cchMultiByte,         // 新しい文字列を受け取るバッファのサイズ
  LPCSTR lpDefaultChar,     // マップできない文字の既定値のアドレス
  LPBOOL lpUsedDefaultChar  // 既定の文字を使ったときにセットするフラグのアドレス
);

CodePage:

定数意味
CP_ACPANSI コードページ
CP_MACCPMacintosh コードページ
CP_OEMCPOEM コードページ
CP_SYMBOLシンボルコードページ(42)
CP_THREAD_ACP現在のスレッドの ANSI コードページ
CP_UTF7UTF-7 を使った変換
CP_UTF8UTF-8 を使った変換

dwFlags:
マップされない文字の処理方法を指定する一連のビットフラグをセットする。 フラグを何もセットしないと、関数の処理速度が向上する。

戻り値:
cchMultiByte に 0 以外を指定して関数が成功すると、lpMultiByteStr が指すバッファに書き込まれたバイト数が返る。
cchMultiByte に 0 を指定して関数が成功すると、変換後の文字列を受け取るために必要なバッファのサイズ(バイト数)が返る。 関数が失敗すると、0 が返ります。


2.MultiByteToWideChar関数

文字列をワイド文字列(Unicode)にマップする。 この関数によってマップした文字列がマルチバイト文字セットに含まれるとは限らない。


int MultiByteToWideChar(
  UINT CodePage,         // コードページ
  DWORD dwFlags,         // 文字の種類を指定するフラグ
  LPCSTR lpMultiByteStr, // マップ元文字列のアドレス
  int cchMultiByte,      // マップ元文字列のバイト数
  LPWSTR lpWideCharStr,  // マップ先ワイド文字列を入れるバッファのアドレス
  int cchWideChar        // バッファのサイズ
);

3.テストプログラム

以下が、この関数を使用したテストプログラムとして紹介されております。


#include <stdio.h>
#include <windows.h>

#define BUFSIZE  256

char *SJIStoUTF8(char *szSJIS, char *bufUTF8, int size) {
    wchar_t bufUnicode[BUFSIZE];
    int lenUnicode = MultiByteToWideChar(CP_ACP, 0, szSJIS, strlen(szSJIS)+1, bufUnicode, BUFSIZE);
    WideCharToMultiByte(CP_UTF8, 0, bufUnicode, lenUnicode, bufUTF8, size, NULL, NULL);
    return bufUTF8;
}

char *UTF8toSJIS(char *szUTF8, char *bufSJIS, int size) {
    wchar_t bufUnicode[BUFSIZE];
    int lenUnicode = MultiByteToWideChar(CP_UTF8, 0, szUTF8, strlen(szUTF8)+1, bufUnicode, BUFSIZE);
    WideCharToMultiByte(CP_ACP, 0, bufUnicode, lenUnicode, bufSJIS, size, NULL, NULL);
    return bufSJIS;
}

void main() {
    char* szSJIS = "あいうえお0123ABCDE123";
    char buf[256];
    char *szUTF8 = SJIStoUTF8(szSJIS, buf, 255);
    puts(szUTF8);
    puts(UTF8toSJIS(szUTF8, buf, 255));
}

動作はしましたが、これはあくまでサンプル内容での確認ですので、実際のプログラムに組んでみましょう。


 SQLite3の基本的な操作

SQLite3の紹介に記事は、日本のサイトでも掃いて捨てる程存在しておりますが、その使い方の説明となると、日本のサイトでは皆無に近い状態になります。
その数少ない日本のサイトから学んだ内容を記載したいと思います。 私が解説出来るレベルであれば良いのですが、道は遠いです。


1.DB接続と切断

sqlite3_open()もしくはsqlite3_open_v2()でデータベースに接続します。
ファイル名がUTF-16の場合はsqlite3_open16()を使用します。使い終わったらsqlite_close_v2()で切断します。


#include <sqlite3.h>
 
int main()
{
sqlite3* db;
 
// open db connection
int rtn = sqlite3_open_v2(
"test_bench.db",
&db,
SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE,
nullptr);
if(rtn != SQLITE_OK){
cerr << sqlite3_errmsg(db) << endl;
}
 
/* exec query */
 
// close db connection 
sqlite_close_v2(db);
 
return 0;
}

2.クエリの実行

sqlite3_exec()を使う場合
sqlite3_exec()は内部的にはprepared_statementを生成して実行しています(sqlite3_prepare,sqlite3_bind_xxx,sqlite3_stepのWrapper)。
"CREATE TABLE”のような初回しか実行しないようなクエリを実行するのに便利です。

 
int ret = sqlite3_exec(db, "CREATE TABLE nodes_tbl(id INTEGER PRIMARY KEY, lon REAL, lat REAL);", nullptr, nullptr, nullptr);

この関数は毎回内部でクエリの変換が行われます。そのため、繰り返し何度も実行するようなクエリではprepared_statementを使う方がパフォーマンスが向上します。

prepared_statementを使う場合
prepared_statementを生成してクエリを実行します。値はsqlite3_bind_xxxx()を使ってbind出来ます(IN等の可変個となるものは不可)。

std::random_device rd;
std::mt19937_64 mt(rd());
std::uniform_real_distribution<double> random_lon(0,359.999);
std::uniform_real_distribution<double> random_lat(-90.0, 90.0);
std::uniform_int_distribution<uint64_t> random_id(0, 100000000);
 
// INSERT
sqlite3_stmt* pStmt;
sqlite3_prepare_v2(db, "INSERT INTO nodes_tbl(id, lon, lat) VALUES(?, ?, ?);", -1, &pStmt, nullptr);
 
for(int64_t i=0; i<100000000; i++)
{
    sqlite3_bind_int64(pStmt, 1, i);
    sqlite3_bind_double(pStmt, 2, random_lon(mt));
    sqlite3_bind_double(pStmt, 3, random_lat(mt));
 
    while(sqlite3_step(pStmt) == SQLITE_BUSY){}
    sqlite3_reset(pStmt);
    sqlite3_clear_bindings(pStmt);
}
 
sqlite3_finalize(pStmt);
 
// SELECT
sqlite3_prepare_v2(db, "SELECT id, lon, lat FROM nodes_tbl WHERE id=?;", -1, &pStmt, nullptr);
 
for(uint64_t i=0; i<100000; i++)
{
    sqlite3_bind_int64(pStmt, 1, random_id(mt));
 
    while(sqlite3_step(pStmt) == SQLITE_ROW)
{
    int64_t id = sqlite3_column_int64(pStmt, 0);
    double lon = sqlite3_column_double(pStmt, 1);
    double lat = sqlite3_column_double(pStmt, 2);
     
    /* some process */
}
    sqlite3_reset(pStmt);
    sqlite3_clear_bindings(pStmt);
}
 
sqlite3_finalize(pStmt);

prepared_statementは1回実行するたびに初期化する必要があります。
sqlite3_reset()はprepared_statementを実行可能な状態にリセットしますが、bindしたデータはそのまま保持されます。
sqlite3_clear_bindings()を実行するとbindしたデータがクリアされます。また、sqlite3_bind_xxxx()は他と違ってインデックスが1から始まるので注意。


3.blobの扱い

SQLiteのblob型はバイナリデータをそのまま格納出来ます。
操作方法も他とほとんど同じですが、sqlite3_bind_blob()の第5引数に注意が必要です。
第5引数はbindするデータが不変(いわゆるconstな変数)なのか一時変数なのなのかを指定します。設定可能な値は以下のとおりです。
SQLITE_STATIC
SQLITE_TRANSIENT
SQLITE_TRANSIENTを指定すると一時変数として判断され、変数内容がすぐにコピーされます。
それに対してSQLITE_STATICを指定するとコピーされず、sqliteがデータベースに書き出す際に変数を直接参照します。
もし変数がスコープを外れるなどして破棄されると正常に書き込めません。大抵は一時変数だと思いますので、SQLITE_TRANSIENTを指定するのが無難です。


sqlite3_bind_int(pStmtInsertData, 1, id);
sqlite3_bind_blob(pStmtInsertData, 2, pData, dataSize, SQLITE_TRANSIENT);
 
while(sqlite3_step(m_pStmtInsertData) == SQLITE_BUSY);
 
 
// select
sqlite3_stmt *pStmt;
sqlite3_prepare_v2(db, querySelectData, -1, &pStmt, nullptr);
sqlite3_bind_int(pStmt, 1, m_FileID);
 
while(sqlite3_step(pStmt) == SQLITE_ROW){
int size = sqlite3_column_bytes(pStmt, 0);
const char* buf = static_cast(sqlite3_column_blob(pStmt, 0));
}

4.エラーハンドリング

SQLiteのエラー処理についてです。エラーは関数の戻り値で判定出来ます。また、以下の関数を呼ぶと直近のエラーに関するエラーコード及びエラーメッセージが取得出来ます。
int sqlite3_errorcode(sqlite3 *db)
const char *sqlite3_errmsg(sqlite3 *db)


int rtn = sqlite3_open("test_bench.db", &db);
if(rtn != SQLITE_OK){
cerr  << “[ERR] Failed to open db:”  << sqlite3_errmsg(db)  << endl;
}

また、関数によっては引数にエラーメッセージを返すものがあります。

char *errmsg = nullptr;
int ret = sqlite3_exec(db, “SELECT * FROM nodes_tbl”, nullptr, nullptr, &errmsg)
if(errmsg != nullptr)
{
cerr  << “[ERR]:”  << errmsg  << endl;
sqlite3_free(errmsg);
}

sqlite3_errmsg()で取得した内容はsqliteモジュール内部で管理されているので、何もする必要はありません。
逆に、sqlite3_exec()など引数にセットされたエラーメッセージは不要になった段階でsqlite3_free()で開放する必要があります。


 sqliteの動作設定について


1.マルチスレッド関連の動作モード

概要
sqliteにはマルチスレッドに関連する動作モードが3つあります。
(1)Single-threadモード
シングルスレッド用。全ての排他制御が無効となる。
(2)Multi-threadモード
マルチスレッド用。
同じDBに対して複数のconnectionを作って操作する場合に使用する。
connectionとprepared_statementの排他制御が無効となるので、同じコネクションを別スレッドで使いまわすSigleton的な使い方は不可(同時アクセスすると壊れる可能性がある)。
(3)Serializedモード
マルチスレッド用。全ての排他制御が有効となる。connection等を複数のスレッドで使いまわすような使い方でも動作が保証される。

C/C++での使い方

C/C++ではsqlite3_config()で動作モードを設定します。設定しなかった場合のデフォルト値はsqliteのコンパイルオプションに依存します。
SQLITE_CONFIG_SINGLETHREAD
SQLITE_CONFIG_MULTITHREAD
SQLITE_CONFIG_SERIALIZED

sqlite3_config(SQLITE_CONFIG_SERIALIZED);

データベース毎に動作モードを設定したいときはsqlite3_open_v2()の第三引数にフラグを指定します。
Multi-threadモード:SQLITE_OPEN_NOMUTEX
Serializedモード:SQLITE_OPEN_FULLMUTEX


sqlite3 *db;
 
int rtn = sqlite3_open_v2(
“./test.db”, 
&db, 
SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE | SQLITE_OPEN_FULLMUTEX, 
nullptr);

2.Memory-Mapped I/O

概要
sqliteはデフォルトではread()/write()を使ってデータベース(ファイル)にアクセスします。
より高速にアクセスしたい場合はmmapを使用するように設定出来ます。但し、必ずしも速くなるわけではないこと、何らかの原因でメモリ上にマップされたデータが破壊されるとデータベース本体(ファイル)も破損する可能性があることに注意が必要です。

C/C++での使い方
sqlite3_config()でSQLITE_CONFIG_MMAP_SIZEを設定するとmmapアクセスが有効になります。
第1引数はmmapバッファのデフォルトサイズ、第2引数はmmapバッファの上限値です。0を指定するとmmap無効(デフォルト)、-1などの負数を指定するとsqlite3のデフォルト値(コンパイルオプションに依存)が設定されます。

int64_t default_mmap_size = 256 * 1024 * 1024;
int64_t max_mmap_size = 512 * 1024 * 1024;
 
sqlite3_config(SQLITE_CONFIG_MMAP_SIZE, default_mmap_size, max_mmap_size);

コネクションごとに設定したい場合は、PRAGMA mmap_sizeを使用します。設定値はmmapバッファのデフォルトサイズを指定します。

// enable mmap
sqlite3_exec(db, “PRAGMA mmap_size=268435456”, null);
 
// disable mmap
sqlite3_exec(db, “PRAGMA mmap_size=0”, null);

SQLite画面6


3.参考

[Home]