вопрос к знатокам.
Необходимо обрабатывать рекурсивную структуру данных, хранящуюся в БД. Использую mdb & ADO + MS Jet 4.0 + С++ #import. ТК попытки создать рекурсивный запрос оказались безуспешными, для обработки поддререва складываю все идентификаторы его узлов во временную таблицу и обрабатываю каждый отдельный узел в цикле с помощью параметризованного объекта Command. Есть, однако идея создать запрос с условием вида "IN (ID1, ID2, ...)" (здесь без цикла, правда тоже не выйдет) — где IDn — идентификаторы узлов, и обработать все выбранные узлы через 1 запрос.
while (!pRecordset->ADOEOF) {
pCommand->GetParameters()->GetItem(0L)->Value =
(long)pRecordset->GetFields()->GetItem(0L)->Value;
pCommand->Execute(NULL, NULL, adCmdText);
pRecordset->MoveNext();
}
VS
CString qstr, tmpstr;
while (!pRecordset->ADOEOF) {
tmpstr.Format(_T("%d, "), (long)pRecordset->GetFields()->GetItem(0L)->Value); // вместо Format можно и _ltot
qstr += tmpstr;
pRecordset->MoveNext();
}
qstr.Format(_T("UPDATE ... WHERE ID IN (%s);"), qstr.Left(qstr.GetLength() - 2)); // убираем лишнюю запятую
pCommand->CommandText = _bstr_t(qstr);
pCommand->Execute(NULL, NULL, adCmdText);
Что из этого лучше с позиций перфоманса?
Носок исчез в гильбертовом пространстве. Туда ему и дорога.