Добрый день.
Есть такая задачка: подключится к sql серверу, прочитать в рекордсет таблицу, закрыть соединение с базой, и в дальнейшем в течении определенного периода читать данные из рекордсета. т.е. вроде кеширования получается. но возникла проблема, что когда закрывается соединение читать рекордсет уже нельзя. собственно вопрос можно ли так организовать загрузку данных в рекордсет, чтобы и после закрытия соединения его можно было использовать для чтения данных. подключаюсь и загружают в рекордсет так
_ConnectionPtr ptrConn("ADODB.Connection");
_RecordsetPtr ptrIPBlocksUrlsRs("ADODB.Recordset");
ptrConn->PutIsolationLevel(adXactCursorStability);
ptrConn->PutCursorLocation(adUseClient);
ptrConn->PutMode(adModeUnknown);
ptrConn->put_CommandTimeout(60);
ptrConn->PutProvider("SQLOLEDB.1");
if (ptrConn->Open("Data Source=Server; Initial Catalog=mydb; User ID=sa; Password=;", "", "", adConnectUnspecified) == S_OK){
ptrIPBlocksUrlsRs->Open(L"MyTable", (IDispatch*)ptrConn, adOpenStatic, adLockOptimistic, adCmdTable);
ptrConn->Close();
}
//вот тут уже получаю эксепшн
int rc = ptrIPBlocksUrlsRs->RecordCount;
Заранее благодарю.
03.08.09 22:26: Перенесено модератором из 'C/C++' — Кодт
Здравствуйте, Аноним, Вы писали:
А>Добрый день.
А>Есть такая задачка: подключится к sql серверу, прочитать в рекордсет таблицу, закрыть соединение с базой, и в дальнейшем в течении определенного периода читать данные из рекордсета. т.е. вроде кеширования получается. но возникла проблема, что когда закрывается соединение читать рекордсет уже нельзя. собственно вопрос можно ли так организовать загрузку данных в рекордсет, чтобы и после закрытия соединения его можно было использовать для чтения данных.
How To Create ADO Disconnected Recordsets in VBA/C++/Java
Здравствуйте, Аноним, Вы писали:
А>Добрый день.
А>Есть такая задачка: подключится к sql серверу, прочитать в рекордсет таблицу, закрыть соединение с базой, и в дальнейшем в течении определенного периода читать данные из рекордсета. т.е. вроде кеширования получается. но возникла проблема, что когда закрывается соединение читать рекордсет уже нельзя. собственно вопрос можно ли так организовать загрузку данных в рекордсет, чтобы и после закрытия соединения его можно было использовать для чтения данных.
"ADODB.Recordset" зависимый обьект от "ADODB.Connection", другими словами, он не может существовать без связи с DataBase.
Если тебе необходимо кэширование, то делай это сам.
ptrIPBlocksUrlsRs->Open(L"MyTable", (IDispatch*)ptrConn, adOpenStatic, adLockOptimistic, adCmdTable);
std::vector<MyTable> arrQuery;
while( !EOF ) {
....
arrQuery.push_back(...);
}
ptrConn->Close();
size_t rc = arrQuery.size();