複数のサーバーでホストされている単一テーブル データベースをサポートするデータ モデルがあります。ただし、従来の ASP ページに表示するために、複数のテーブルからデータをコンパイルする必要がある場合があります。これは、C++ の COM オブジェクトで行われます。OleDb を使用して SQL Server からデータを収集し、OleDb ロジックでデータを C++ 構造体に直接書き込みます。次に、データを SafeArrays に追加する構造体配列をループしてから、これらをレコードセットに追加します。レコードセットにデータを追加するロジックは、大まかに次のようになります (初期化とエラー処理ロジックは省略されています)。
SAFEARRAY* fields; // Initialised to integer array 0 -> max fields
SAFEARRAY* values;
VARIANT* arraydata;
... // initialisation logic
SafeArrayAccessData(values, reinterpret_cast<void**>(&arrayData));
for(unsigned int i = 0; i < numDataValues1; ++i)
{
// Add data
arraydata[0].intVal = data[i].someValue;
... // etc.
for(unsigned int j = 0; j < numDataValues2; ++j)
{
arraydata[21].intVal = data2[j].someValue;
... // etc.
_recordset->raw_AddNew(fields, values);
_recordset->Update();
}
}
ただし、速度は比較的遅いです。1000 行のデータを追加するのに 1 秒かかることがありますが、これは私たちの環境では長すぎます。raw_AddNew と Update の呼び出しをコメントアウトすると、ロジックが飛びます。したがって、問題は、データをレコードセットに追加する方法にあります。提案やアドバイスをいただければ幸いです。よろしくお願いします。