Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.035 c
14-1102242598
dr Tr0jan
2004-12-05 13:29
2004.12.26
Гриль в микроволновке


3-1101797288
_Sheriff
2004-11-30 09:48
2004.12.26
рекурсивная процедура в Firebird


9-1093434182
бобомен
2004-08-25 15:43
2004.12.26
массив спрайтов


1-1102784356
AdmeraL
2004-12-11 19:59
2004.12.26
requires


3-1101392577
kaktus
2004-11-25 17:22
2004.12.26
Delphi и MySQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский