Re: Дублирование последней записи выборки
От: matveykin Украина  
Дата: 03.04.08 09:06
Оценка:
Здравствуйте, Я, Вы писали:

M>Есть такая задача: сделать выборку из базы на MS SQL Server 2000 средствами OLE DB. Вроде бы всё сделал как в MSDN рекомендовано, но происходит дублирование последней записи. Мягко выражаясь, торможу — не могу понять в чём дело. Помогите дельным советом, пожалуйста!! Код ниже. SQL запрос оттестил — всё в порядке.


M>
M>char* DbAccess::GetData(BOOL* RowsEndFlag, wchar_t** wRowsData)
M>{
M>    hr = pIRowset->GetNextRows(NULL, 0, 1, &cRowsObtaned, &pRow);
M>    if (FALSE(hr))
M>    {
M>        pIRowset->ReleaseRows(cRowsObtaned, rghRows, NULL, NULL, NULL);
M>        delete [] pRowValues;
M>        delete [] pDBBindStatus;
M>        delete [] pDBBindings;    
        
M>        pIAccessor->ReleaseAccessor(hAccessor, NULL);
M>        pIAccessor->Release();
M>        pIColumnsInfo->Release();
M>        pIRowset->Release();
M>        pICommandText->Release();
M>        pIDBCreateSession->Release();
M>        pIDBInitialize->Uninitialize();
M>        pIDBInitialize->Release();
M>        CoUninitialize();
M>        *RowsEndFlag = FALSE;
M>        return "Error GetNextRows";
M>    }    

M>    if (cRowsObtaned == 0)
M>    {
M>        *RowsEndFlag = FALSE;
M>        delete [] pRowValues;
M>        return "OK";
M>    }

M>    hr = pIRowset->GetData(rghRows[0], hAccessor, pRowValues);
M>    if (FALSE(hr))
M>    {
M>        pIRowset->ReleaseRows(cRowsObtaned, rghRows, NULL, NULL, NULL);
M>        delete [] pRowValues;
M>        delete [] pDBBindStatus;
M>        delete [] pDBBindings;
        
M>        pIAccessor->ReleaseAccessor(hAccessor, NULL);
M>        pIAccessor->Release();
M>        pIColumnsInfo->Release();
M>        pIRowset->Release();
M>        pICommandText->Release();
M>        pIDBCreateSession->Release();
M>        pIDBInitialize->Uninitialize();
M>        pIDBInitialize->Release();
M>        CoUninitialize();
M>        return "Error GetData from Rows";
M>    }

M>        for (ULONG nCol = 0; nCol < nCols; nCol++)
M>            *(wRowsData + nCol) = (wchar_t*)&pRowValues[pDBBindings[nCol].obValue];
    
M>    hr = pIRowset->ReleaseRows(cRowsObtaned, rghRows, NULL, NULL, NULL);
    
M>    return "OK";
M>}

M>

M>Прошу строго не ругать за немного корявый код — это уже в процессе отладки захламилось — позже почищу. Главное сама идея.... И, просто не здесь инициализируется...

M>
M>HROW rghRows[1];
M>HROW* pRow;
M>char* pRowValues;
M>//.......
M>pRow = &rghRows[0];
M>pRowValues = new char[cbRow]
M>


M>дабы не возникали всякие-разные подозрения.... Хотя я не понимаю почему бы не объявить HROW* rghRows = new HROW[1] и использовать уже &rghRow... Ну... так в MSDN...


Вопрос снят — ошибка было в обработке данных, получаемых от этой функции......
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.