for (int i = ...) или IN (1, 2, ...) - что лучше?
От: last shinji  
Дата: 18.07.04 11:26
Оценка:
вопрос к знатокам.
Необходимо обрабатывать рекурсивную структуру данных, хранящуюся в БД. Использую 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);


Что из этого лучше с позиций перфоманса?
Носок исчез в гильбертовом пространстве. Туда ему и дорога.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.