C++/ODBCアプリケーションで固定配列サイズを取り除く必要があります。 ハードコードされた配列サイズ(ROWS = 10以下)では、コマンドライン引数としてROWSを渡したいと思っています。私はコマンドラインを解析する方法を知っています。 しかし、次のコードを調整するには?C++コードをリファクタリングして動的配列サイズをサポートする方法
#define ROWS 10 SQLINTEGER idata[ROWS] SQLCHAR cdata1[ROWS][256] SQLFLOAT fdata[ROWS] SQL_TIMESTAMP_STRUCT ts[ROWS] SQLSetStmtAttr(SQL_ATTR_ROW_ARRAY_SIZE, ROWS) SQLBindCol(1, &idata) SQLBindCol(2, cdata1) SQLBindCol(3, fdata) SQLBindCol(4, &ts) SQLExecDirect("query producing a result-set")
アップデート:私はのSQLBindCol(..)の署名を変更することはできません
レッツは)(代わりにSQLFLOAT FDATAのベクトルは[ROWS] ::私はSTDを作成すると言うが、SQLBindColのにそれを渡す方法std :: vectorは期待していませんか?
を使用して動的2次元配列のためのソリューションですあなたはC++で可変長配列を持つことができない配列の長さはconstant.Youは 'STDを使用して検討する必要がありますコンパイル時でなければなりません。: :vector'または 'std :: array'を使用します。 –
C++は可変長配列を提供しませんが、コンパイル時定数である必要はありません。それが '新しい'のためのものです。例えば'SQLINTEGER * idata = new SQLINTEGER [rows]'(後で '[]'を削除することを忘れないでください)。多次元配列 'cdata1'は動的に割り当てられないので、より大きな問題です。あなたができる最善の方法は、配列の配列か、一つの '新しいSQLCHAR [rows * 256]'です。ここで 'SQLBindCol'がどのように動作するかによって動作するかもしれません。私はそれ以上のことを助けるためにODBCについて十分に知りません。 –