Главная страница
    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.031 c
1-1102675226
Chaser
2004-12-10 13:40
2004.12.26
Как сделать так, чтобы мою программу не взломали?


3-1101518726
alo
2004-11-27 04:25
2004.12.26
получить ссылки всех контролов, прицепленных к DataSet у


9-1093136923
Xerx
2004-08-22 05:08
2004.12.26
Аналог Blitz3D


1-1102697804
SoT1
2004-12-10 19:56
2004.12.26
Dll


1-1103014114
Delphi5.01
2004-12-14 11:48
2004.12.26
выезжающее окошко как это сделано в WinAmp-е





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский