C++/STLでODBC

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にしました。

ダウンロード(2011/04/15 SourceForgeにプロジェクトを作成しました)
2008-03-11 | コメント:5件
eiichiより
2009-04-22 05:57:16
はじめまして。
ダウンロードして使わせてもらいました。ヘッダにまとまってて使いやすそうです。
当方の環境はUbuntu8.10(2009/4/20の時点で最新の安定版です)
コンパイル時に3ヵ所エラーが出ましたので報告です。
(1) #include に関連した部分はにするようにとコンパイラに言われるので、そうしてみました。
(2)SQLGetData()の6番目の引数が、SQLINTEGER*ではなくSQLLEN*にしないとコンパイル通らず。rbufsizeという変数名で2ヶ所あります。
(3)SQLDescribeCol()の7番目の引数も同じく、SQLULEN*にしないとだめといわれたので、そのように変更しました。こちらは1ヶ所だけです。

以上ですが、ありがたく使わせてもらっています。
ありがとうございました。
eiichiより
2009-04-23 00:43:29
あと、MySQL5に接続する際、ドライバ名を直に指定しようとすると、
Driver={MySQL ODBC 5.1 Driver}
Driver=MySQL ODBC 5.1 Driver
とする必要がありました。
直接Kz_odbcとは関係ありませんが、サンプルコードでAccessのDBを指定する文字列が
Driver={Microsoft Access Driver (*.mdb)};
となっていましたので、参考までです。
Katsuhisa Ohfujiより
2009-04-23 19:03:55
eiichiさんはじめまして、おおふじです。

Ubuntu8.10の動作確認連絡ありがとうございます。
幾つか修正があったということで、
Vine Linuxでは、そのままコンパイルできたので、
ODBC関係のライブラリがVine Linuxとは異なるようですね。
機会があれば私の方でも試してみたいと思います。

Driverの{}の記述ですが、私の手元で確認しましたところ、
Windows/Vine Linux共無くても動きました。
利用者に無用な混乱を与えてもよくないと思うので、次回のバージョンからは
サンプルの{}は無しでリリースします。

ご連絡ありがとうございました。
eiichiより
2009-04-30 11:10:58
おおふじさんこちらこそはじめまして。返事くださってありがとうございます。
SQLUINTEGER が unsigned int に、SQLULEN が long に定義されていて、64ビット環境だとコンパイルが通らなくなるようです。私が試したのは、64ビットのUbuntu8.10でした。
katsuhisaより
2009-05-07 22:49:53
eiichiさん、返信ありがとうございます。

なるほど、64bit環境でしたか。
SQLGetDataのプロトタイプを確認しましたところ、
SQLINTEGERではなく、SQLLENが正解でした。

32Bit環境ではどちらも同じintで定義してあったので、
コンパイルが通ったみたいですね。
その他、SQLDescribeColの引数がSQLULENで定義されていました。

コンパイルだけですが、連休中にUbuntu8.10で試してみました。

更新版をUPしました。

コメントをどうぞ


『不適切なコメントへの対応』を一読下さい。
現在コメントは承認制となっております。

Previous Page | Next Page