Можно ли использовать ADO на платформе C ++ для запроса диапазона записей? Например. 100 записей на запрос? - PullRequest
0 голосов
/ 10 октября 2011

Я использую c ++ с ADO для подключения к базе данных mySql, и я использую стандартный метод ADO / C ++ для создания соединения с базой данных mySql, а recordset - указатель на извлеченную первую запись

_RecordsetPtr recordset;
recordset->Open("Select * from table",p_connection_.GetInterfacePtr(),adOpenForwardOnly,adLockReadOnly,adCmdText);  

Меня беспокоит, если таблица содержит слишком много записей, и если я запрашиваю все записи, она будет занимать много памяти?

Я хочу только получить, может быть, 100 записей каждый раз и обрабатывать их. Является ли это возможным? Таблица не содержит идентификатор или индекс в качестве атрибута, поэтому «Выбрать * из таблицы, где идентификатор> = 1 и идентификатор <= 100» не работает. </p>

1 Ответ

1 голос
/ 10 октября 2011

Вы захотите использовать ограничения для запроса и циклически их проходить.

//SELECT * FROM table LIMIT 0 OFFSET 100

int tlimit, blimit;
std::string query;
std::stringstream sstm;
_RecordsetPtr recordset, count;

count->Open("SELECT COUNT(*) FROM table",p_connection_.GetInterfacePtr(),adOpenForwardOnly,adLockReadOnly,adCmdText);

for(int i = 0; i < count/100 + 1; i++)
{
   tlimit = 100 * i + 100;
   blimit = 100 * i;

   sstm << "SELECT * FROM table LIMIT " << blimit << " OFFSET " << tlimit;
   query = sstm.str();

   recordset->Open(query,p_connection_.GetInterfacePtr(),adOpenForwardOnly,adLockReadOnly,adCmdText);

   //suggest passing the recordset to a function to do what ever you want with it here
}

Обратите внимание, что если вы не используете базу данных, которая начинает свои записи с 1, вам придется немного изменить этот алгоритм.

...