Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Запись в БД в многопоточном приложении


Автор: hazamov 11.4.2011, 14:11
Здравствуйте. Манипулировал данными в БД в однопоточном приложении, и всё шло замечательно. 
Когда перешел на многопоточность, появилась ошибка 
Код
 Project booth.exe raised exception class EOleException with message [Microsoft][Драйвер ODBC Microsoft Access] В операции должен использоваться обновляемый запрос. 


Вот код:
Код

 AnsiString Query;
    ADOQuery1->SQL->Text="select SN from Items INNER JOIN geninfo ON Items.genkey=geninfo.ID WHERE geninfo.Implementation='"+IntToStr(Implementation)+"' ORDER BY SN DESC";
    ADOQuery1->Active=true;
    ADOQuery1->First();
    AnsiString str=ADOQuery1->FieldByName("SN")->AsString;      //проверка на существование серийника
    if (str=="") {str="32768"; nSerialNumber=StrToInt(str);}
                           else {
                                nSerialNumber=StrToInt(str);
                                nSerialNumber+=1;
                                }


    Query="select g.ID from geninfo as g WHERE Implementation='"+IntToStr(Implementation)+"'";    //вставляем новый серийник в базу
    ADOQuery1->SQL->Text=Query;
    ADOQuery1->Open();
    str=ADOQuery1->FieldByName("ID")->AsString;
    Query="INSERT INTO Items (SN, genkey)  VALUES('"+IntToStr(nSerialNumber)+"','"+str+"')";
    ADOQuery1->SQL->Text=Query;
    ADOQuery1->ExecSQL();


Все запросы возвращают пустые результаты(хотя должны что-то возвращать), а последняя строчка вызывает ту самую ошибку обновлений записи. Код вызывается из главного Unit'а в С++.

В чём может быть дело, товарищи?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)