最初に
多少なりともプログラムを齧(かじ)った事のある人なら、SQLite(エスキューライト)を知らない方は居ないと思います。
ウィキペディアによれば、SQLite は、パブリックドメインの軽量な関係データベース管理システム (RDBMS) であると記載されています。
私も10年以上前から利用しており、下記の画像は SQLite で作成した競馬データベースから、データを読み込んでレース結果を表示させたものです。
私は、JRA-VAN で、競馬予想ソフトや競馬のデータベースを公開しておりますので、Microsoft Access や SQLite、SQLServer との付き合いは長いです。
上記のソフト(馬ちゃんの馬吉 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のメリット SQLite(エスキューライト)とは、軽量コンパクトなリレーショナルデータベースシステムです。
「小型」「高速」「自己完結型」「高信頼性」「高機能」のSQLデータベースエンジンを実装するC言語ライブラリとして、主に「組み込み用途」や「小規模システムのデータストア」として利用されています。 SQLiteは「小型」「高速」「自己完結型」「高信頼性」「高機能」のSQLデータベースエンジンを実装するC言語ライブラリです。 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 はライセンスを気にする必要がなく、使用上でも特に問題が無いデータベースであるのが認識できると思います。
以降に 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 を読み込ませた画像です。
このデータは、データ量が多くて、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-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 に移動します。
画像のように、コマンドは、lib /def:sqlite3.def と入力するだけです。
念のため、管理者権限で実行しましたが、アカウントが管理者(Administrator)であれば実行に問題はないでしょう。
実行後の sqlite ファルダの内容です。
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_ACP | ANSI コードページ |
CP_MACCP | Macintosh コードページ |
CP_OEMCP | OEM コードページ |
CP_SYMBOL | シンボルコードページ(42) |
CP_THREAD_ACP | 現在のスレッドの ANSI コードページ |
CP_UTF7 | UTF-7 を使った変換 |
CP_UTF8 | UTF-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);
3.参考
- SQLite – Documentation https://www.sqlite.org/docs.html
- Qiita @staatsschreiber – sqlite3のblob操作API https://qiita.com/staatsschreiber/items/bc43c9b5c9cda2d7a5ea
- Qiita @TomK – SQLiteで日付時刻を扱う際のポイント https://qiita.com/TomK/items/132831ab45e2aba822a8
- MASATOの開発日記 – SQLite性能評価その3 http://www.sutosoft.com/room/archives/000454.html
- askyb.com – C++ SQLite Example with Atomic Transaction http://www.askyb.com/cpp/c-sqlite-example-with-atomic-transaction/
- きままにブログ – SQLite3のテストだよ! http://staryoshi.hatenablog.com/entry/2015/10/28/142925
- stackoverflow – sqlite3 preparing https://stackoverflow.com/questions/3822115/sqlite3-preparing-binding-and-resetting-statements
- 技術は熱いうちに打て! – 【cocos2d-x】sqlite3のドキュメントを訳してみた http://blog.dalt.me/898
- MONOist – Android Tips(21): SQLiteデータベースのチューニング (1/2) http://monoist.atmarkit.co.jp/mn/articles/1209/26/news004.html
- Qt wiki – How to Store and Retrieve Image on SQLite https://wiki.qt.io/How_to_Store_and_Retrieve_Image_on_SQLite
- 作っても動かない – データベースを使う(sqlite3) https://blogs.yahoo.co.jp/hmfjm910/10815002.html
- ぴょぴょぴょ? – kernelの cache を強制開放する方法 http://d.hatena.ne.jp/pyopyopyo/20110906/p1
- Siv3D 開発ブログ – C++11 の乱数ライブラリ <random> http://siv3d.hateblo.jp/entry/2013/02/17/231829