Windows環境にてC言語やC++でODBCを使うには3

Windows環境にてC言語やC++でODBCを使うには2
http://sato-si.at.webry.info/200505/article_1.html
の続き。

前回ののプログラムでは,結果取得のためのカラム(列)数が30個に限定されていました。
30カラムを超えるとだめだし,カラム数が30も要らないこのとの方が多いです。
あまり使われていないのに30この配列が256個の要素を持つのも結構無駄です・・・。

  // SQL結果取得用のバッファ
  UCHAR data[30][256]; // データ格納用
  SQLINTEGER datastrlen[30]; // 帰ってきた文字列長

なので,これを修正して

  // SQL結果取得用のバッファ
  typedef UCHAR type_data[256]; // 1データ格納用の文字列
  type_data *data; // データ格納用 UCHAR type_data[256]へのポインタ方
  SQLINTEGER *datastrlen; // 帰ってきた文字列長

としてしまい,

  // SQL文の結果のテーブルのカラム(項目)数をnresultcolsに取得
  SQLNumResultCols(hstmt, &nresultcols);

でカラムの項目数を取得した後に以下のコードを追加

  data = (type_data*)malloc(sizeof(type_data) * nresultcols );
  datastrlen = (SQLINTEGER *)malloc(sizeof(SQLINTEGER) * nresultcols );

とすることで,dataとdatastrlenが最大30カラムの制限がなくなります。

終わった後で,メモリを開放するのを忘れずに(以下のコードを最後につけます)

  free(data);
  free(datastrlen);

続きは, Windows環境にてC言語やC++でODBCを使うには4
http://sato-si.at.webry.info/200604/article_4.html


この記事へのコメント

この記事へのトラックバック