Здравствуйте. Манипулировал данными в БД в однопоточном приложении, и всё шло замечательно. Когда перешел на многопоточность, появилась ошибка
| Код | 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'а в С++.
В чём может быть дело, товарищи? |