C++でDBへアクセスするにはMFCだの、ADOだのややこしいライブラリをリンクするか、黙ってCで記述(各DBのライブラリを直接呼び出すコードを記述)するか、マネージドコードの仲間入りになるかになる。
最近流行りの言語(PHPとか)はあっさりDBをサポートしているのにC++/STLでさくっとSQLを書きたい場合、結構骨が折れる。
と言う訳で、なんちゃってodbcクラスを作りました。
以下のようにSQLが発行できちゃいます。
db, "INSERT INTO test( c1, c2) VALUES(?,?)", "test", 100, endsql;
ぱっと見、何がなんだか分からないかもしれませんが、キモはSQL文に続けてパラメータが記述できる点で、結構楽にSQLが発行できます。
(見る人が見れば凶悪な演算子のオーバーロードに見えるかもしれないが・・・)
ちなみに、様々なDBに対応する為と、Linuxへの移植性を考えてODBCにしました。
はじめまして。
ダウンロードして使わせてもらいました。ヘッダにまとまってて使いやすそうです。
当方の環境はUbuntu8.10(2009/4/20の時点で最新の安定版です)
コンパイル時に3ヵ所エラーが出ましたので報告です。
(1) #include に関連した部分はにするようにとコンパイラに言われるので、そうしてみました。
(2)SQLGetData()の6番目の引数が、SQLINTEGER*ではなくSQLLEN*にしないとコンパイル通らず。rbufsizeという変数名で2ヶ所あります。
(3)SQLDescribeCol()の7番目の引数も同じく、SQLULEN*にしないとだめといわれたので、そのように変更しました。こちらは1ヶ所だけです。
以上ですが、ありがたく使わせてもらっています。
ありがとうございました。
あと、MySQL5に接続する際、ドライバ名を直に指定しようとすると、
Driver={MySQL ODBC 5.1 Driver}
Driver=MySQL ODBC 5.1 Driver
とする必要がありました。
直接Kz_odbcとは関係ありませんが、サンプルコードでAccessのDBを指定する文字列が
Driver={Microsoft Access Driver (*.mdb)};
となっていましたので、参考までです。
eiichiさんはじめまして、おおふじです。
Ubuntu8.10の動作確認連絡ありがとうございます。
幾つか修正があったということで、
Vine Linuxでは、そのままコンパイルできたので、
ODBC関係のライブラリがVine Linuxとは異なるようですね。
機会があれば私の方でも試してみたいと思います。
Driverの{}の記述ですが、私の手元で確認しましたところ、
Windows/Vine Linux共無くても動きました。
利用者に無用な混乱を与えてもよくないと思うので、次回のバージョンからは
サンプルの{}は無しでリリースします。
ご連絡ありがとうございました。
おおふじさんこちらこそはじめまして。返事くださってありがとうございます。
SQLUINTEGER が unsigned int に、SQLULEN が long に定義されていて、64ビット環境だとコンパイルが通らなくなるようです。私が試したのは、64ビットのUbuntu8.10でした。
eiichiさん、返信ありがとうございます。
なるほど、64bit環境でしたか。
SQLGetDataのプロトタイプを確認しましたところ、
SQLINTEGERではなく、SQLLENが正解でした。
32Bit環境ではどちらも同じintで定義してあったので、
コンパイルが通ったみたいですね。
その他、SQLDescribeColの引数がSQLULENで定義されていました。
コンパイルだけですが、連休中にUbuntu8.10で試してみました。
更新版をUPしました。