Форум: "Базы";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизДва запроса на одной транзакции Найти похожие ветки
← →
Garincho (2004-11-26 15:04) [0]Уважаемые Мастера подскажите. Такая проблема: на одной транзакции висят два запроса на добавление. По неизвестной причине не систематически один запрос (а именно второй) не добавляет записи в таблицу (а первый добавляет). Оба запроса на добавление. В чем может быть дело?
пример кода:
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;
← →
Johnmen © (2004-11-26 15:13) [1]А где запрос-то на добавление ?
И что есть CommitTransact, откуда это ?
Короче, меньше кода, больше сути :)
← →
Garincho (2004-11-26 15:27) [2]:) Да суть в том что из 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;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.032 c