![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Два запроса на одной транзакции [D7, IB6.x]
Garincho © (2004-11-26 15:04:00)Уважаемые Мастера подскажите. Такая проблема: на одной транзакции висят два запроса на добавление. По неизвестной причине не систематически один запрос (а именно второй) не добавляет записи в таблицу (а первый добавляет). Оба запроса на добавление. В чем может быть дело?
пример кода:
if (FID_Zakaz_Reserved>0) then UpdOper_To_Zm // Если заказ был ранее зарезервирован
Else Begin
try
FixOper_To_ZM;
except
application.MessageBox('Внимание произошла ошибка при выполнении запроса -1!', 'ОШИБКА', MB_OK + MB_ICONSTOP);
ErrFix(555,851,'Выполнение запроса-1',Sklad_dtMod.id_zkz);
end;
if LvZak.Items.Count < 1 then begin
application.MessageBox('Внимание список наименований заказа пуст!!', 'ОШИБКА', MB_OK + MB_ICONSTOP);
ErrFix(5559,8519,'список наименований заказа пуст',Sklad_dtMod.id_zkz);
end;
For ii:=0 to LvZak.Items.Count-1 do
with qryInsPrixRasx do begin
Close;
Params.ByName('ID_OPER').asInteger:=GetIdOper;
Params.ByName('GOODS_ID').asInteger:=StrToInt(LvZak.Items[ii].SubItems[5]);
Params.ByName('ID_ZAKAZ').asInteger:=Sklad_dtMod.id_zkz;
// Params.ByName('TYPE_OPER_ID').asInteger:=2;
Params.ByName('COUNT_GOODS').asFloat:=StrToFloat(LvZak.Items[ii].SubItems[2]);
Params.ByName('EDIZM_ID').asInteger:=StrToInt(LvZak.Items[ii].SubItems[6]);
Params.ByName('CENA_ZA_ED').asFloat:=StrToFloat(LvZak.Items[ii].SubItems[3]);
Params.ByName('OBRAZEC_ONLY').asInteger:=StrToInt(LvZak.Items[ii].SubItems[8]);
// Params.ByName('TYPE_PAY_ID').asInteger:=1;//////////////
Params.ByName('WORKER_ID').asInteger:=Sklad_dtMod.userProfile.id_usrstrax;
try
ExecQuery;
except
application.MessageBox('Внимание произошла ошибка при выполнении запроса -2!', 'ОШИБКА', MB_OK + MB_ICONSTOP);
ErrFix(555,851,'Выполнение запроса',Sklad_dtMod.id_zkz);
end;
Close;
end;
end; // if FID_Zakaz_Reserved>0
try
Sklad_dtMod.CommitTransact; //подтверждаем выполнение запросов
except
application.MessageBox('Внимание произошла ошибка при подтверждении ТРАНЗАКЦИИ!', 'ОШИБКА', MB_OK + MB_ICONSTOP);
ErrFix(555,789,'Подтв транзакции',Sklad_dtMod.id_zkz);
end;
end;
//**************************************************************************************************************
procedure TfmPrnChek.FixOper_To_ZM;
begin
with ibAdZapToZM do begin
ParamByName('zk_id').asInteger:=Sklad_dtMod.id_zkz; //заказ
ParamByName('tp_id').asInteger:=1; //тип расчёта за наличные - 1
ParamByName('w_id').asInteger:=Sklad_dtMod.userProfile.id_usrstrax; //кто выполнил
ParamByName('dtop').asDateTime:=now;
ParamByName('to_id').asInteger:=2; //отпуск товара -2
ParamByName('msnds').asFloat:=StrToFloat(fl_sum_all.Text); //деньги с ндс
// ParamByName('mnds').asFloat:=(StrToFloat(fl_sum_all.Text)*0.18/1.18); //ндс
ParamByName('mnds').asFloat:=
Sklad_dtMod.Get_SummNDS(StrToFloat(fl_sum_all.Text),PercentNDS_ALL);
// константа PercentNDS_ALL -определена в Sklad_dtMod
if trim(flDiscount.Text)='' then begin
ParamByName('dscnt').asFloat:=0
end
else ParamByName('dscnt').asFloat:=StrToFloat(flDiscount.Text); //скидка
if lvKlient.Selected=nil then begin
ParamByName('prtnid').asInteger:=0 //партнер
end
else ParamByName('prtnid').asInteger:=StrToInt(lvKlient.Selected.SubItems[0]); //партнер
ParamByName('pdrzdid').asInteger:=Sklad_dtMod.departmnt;
ParamByName('IDVALUT').AsInteger:=idvalut; //id валюты
ParamByName('KURS_CUR').asFloat:=Sklad_dtMod.StrToFloat_My(flKUE.Text); //курс
ExecQuery;
Close;
end;
end;
Garincho (2004-11-26 15:27:00) [1]:) Да суть в том что из 5000 случаев 6 проблемных (т.е второй запрос не отрабатывает) самому мне не удаётся поймать момент неудачи, а юзеры ничего сказать не могут (в тч и записать на бумагу что там написалось в ошибке :( ). CommitTransact - лежит в отдельном модуле:
procedure TSklad_dtMod.CommitTransact;
begin
IBTransaction1.Commit;
CheckActivTransact;
end;
procedure TSklad_dtMod.CheckActivTransact;
begin
if (not Sklad_dtMod.IBTransaction1.Active) then Sklad_dtMod.IBTransaction1.Active:=true;
end;
Johnmen (2004-11-26 15:13:00) [2]А где запрос-то на добавление ?
И что есть CommitTransact, откуда это ?
Короче, меньше кода, больше сути :)