/**********************************************************************
 kz_odbc.h  ODBC APIの簡易ラッパークラス
 Authors	Katsuhisa Ohfuji
 Version	0.1a(開発版）2008/03/11
 Version	0.2a(開発版）2008/04/14 NULL値の取得エラーの修正
									（NULL値を空文字として取得する）
 Version	0.3a(開発版）2008/05/16 カタログ関数(tables,columns)の追加
 Version	0.4a(開発版）2009/01/06 Linux対応（＋一部関数の追加）
 Version	0.5a(開発版）2009/02/12 colinfoの添え字調整
 Version	0.6a(開発版）2009/02/27 トランザクション対応
									Fetch関数（next）の追加
 Version	0.7a(開発版）2009/04/10 データ取得のバグ修正
 Version	0.7b(開発版）2009/05/07 引数のデータ型の訂正
 Version	0.8a(開発版）2009/05/12 NULLデーター挿入の対応
 Version	0.8b(開発版）2009/12/11 64bit修正
 Version    0.9          2011/04/14 バグフィックス
 
 使い方（Ver0.6から使い方が変わりました）
    1.kz_odbcオブジェクトを作成（コンストラクタにODBC接続文字列を指定）

     kz_odbc db("DSN=myaccess", false);
   
     ※DSNでデーターソースの指定のほか、Driverでの指定も可
     ※コンストラクタの2つ目の引数はコミットモードを指定する
	   trueで手動コミットモード、falseで自動コミットモード
	   手動コミットモードにした場合、最後にCommit()を呼び出す必要がある。
	   
    2.SQLの発行
	 stmtオブジェクトを作成し、SQLを発行する。
	 
     kz_stmt stmt(&db);

     stmt, "INSERT INTO TEST(col1, col2) VALUE(?, ?)", "val1", 10, endsql;

     ※各要素をカンマ(,)で区切る
     ※最初にkz_stmtオブジェクトを指定し、次にSQLを文字列で指定する。
     ※パラメーター（？に対する値）を続けて指定
     ※パラメーターで指定できる型は、整数(各int)、文字（char*)、
       浮動小数点（double,float）、時間（struct tm)
       それ以外の型を指定するとSQLが発行されない（式全体が無視される）。
     ※整数の0をパラメータに指定する時は一度変数に入れてから指定する。
     　（C++コンパイラでは、整数の0は、NULLポインタと解釈されるので）
	 ※NULL値を指定したいときは、kz_odbc_nullを指定する。
		stmt, "INSERT INTO TEST(col1) VALUE(?)", kz_odbc_null, endsql;
     ※最後にendsqlと記述する（記述がないとSQLが発行されない）。
     
    3.値を返すSQLの発行
    
     kz_resultset_array result = (stmt, "SELECT * FROM TEST", endsqlrs);
    
     ※ 結果セットは、kz_resultset_array（後述）で返る
     ※ SQL発行部のカンマ式の全体を()で括る。
        演算子の優先順位の関係で全体を括らないと値が返らない。
     ※ 最後は、endsqlrsと記述する（endsqlでは値が返らない）。
    
    4.結果セットの参照方法
     結果セット（kz_resultset_array）は、以下のtypdefになっている。
     	std::vector< std::map< std::string, std::string> >
     ※SELECTの結果を全て受け取る
     ※行はvectorに列はmap（列名と値のmap)になっている。
     　　cout << result[1]["ID"]
     　のようにアクセスできる。
     ※結果セットは、文字列に変換されて返る
    5.エラーの確認
	 ※iserrメンバ関数でエラーの有無が分かる
	 ※errorsメンバ関数でエラー情報が取得できる
	 　結果は、kz_string_array( std::vector< std::string > )で返る。
 サンプル
　kz_odbc_sample.cppをご参照下さい。
 ライセンス
 　本ソフトウェアはGPLで配布しています。
 文字コード
　本ファイルはUTF-8でエンコードしています。
  kz_odbc.hはShift_JIS（CP932）でエンコードしています。
　お使いの環境に合わせて文字コードを変更後、ご使用願います。
 動作環境
　以下の環境で動作確認をしています。
　Windows 7(64bit)　32bitモード・64bitモード access
　Windows 7(64bit)　32bitモード・64bitモード SQL Server 2008
　Windows 7(64bit)　32bitモード・64bitモード MySQL(connector 5.18)
  Centos 5.5(32bit) unixODBC 2.2.11 MySQL connector 3.51
 コンパイル方法
  Windows:サンプルをご参照ください。
　Linux: unixODBCが必要です。ランタイムと開発版両方必要です。
　　例）centos5.5 RPM：unixODBC-2.2.11およびunixODBC-devel-2.2.11
	コンパイル時に g++コマンドに対して -lodbc オプションを指定下さい。
**********************************************************************/
