Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при IBTransaction.Commit - "List index out of bounds (8)" [D7, IB6.x]


Страницы:   1 2

Slonco ©   (2004-09-16 10:55:00) 

Помогите, пожалуйста.
Вставляю запись в таблицу и пытаюсь сделать Commit.
Вроде элементарщина, а не получается ничего. Причем есть исходники аналогичного приложения, где то же самое, та же самая таблица формируется без проблем! Не пойму что не так.

      Может вы уже сталкивались с этой проблемой?

Подробнее:
---------------------------
Debugger Exception Notification
---------------------------
Project ANALYSIS.exe raised exception class EStringListError with message 'List index out of bounds (8)'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help  
---------------------------

Проверку на InTransaction делаю. StartTransaction сделал.
Спасибо.


Slonco   (2004-09-16 12:11:00) [21]

За него я и переживаю - за M (это TStringList).
Дело  том, что когда я не ставлю коммит, то запись заносится в таблицу!!! Странности...

Боюсь, что придется отказаться от параметров ради проверки...


Sergey13   (2004-09-16 12:05:00) [22]

С массивом разберись ИМХО. Или что там у тебя такое M[16+s]


Марк   (2004-09-16 11:59:00) [23]

Судя по классу ошибки (EStringListError) исключение происходит не при выполнении запроса, а при создании текста SQL в компоненте IBQuery. Может есть смысл создать запрос статически, а не в кодах. Например, через построитель (IBExpret позволяет строить любые типы запросов простым перетаскиванием таблицы на поле SQL редактора). Там же можно сформировать аналогичную хранимую процедуру и проверить ее работу в режиме пошаговой отладки с конкретными параметрами.


Slonco   (2004-09-16 11:38:00) [24]

:) клещами не надо! Я сам все скажу!!! :D

   with IBQuery do begin
     ContinueTrans;
     SQL.Clear;
     SQL.Add('INSERT INTO ANALYTIC (ID, ROUTDATE, ROUTE, SHEDULE, SHIFT, MIF, GN, '
      + 'ATP, SSPCORR, SSP, FACT, REGUL, PLAN_OUT, FACT_OUT, PLAN_IN, FACT_IN, '
      + 'STOP1, STOP2, STATUS, WORK_BEGIN, WBP_TIME, WBP_ROUTES, WBF_TIME, '
      + 'WBF_ROUTES, WB_SS, IS1X_MIN, IS1X_MAX, IS1M_MIN, IS1M_MAX, IS1A20_MIN, '
      + 'IS1A20_MAX, IS2X_MIN, IS2X_MAX, IS2M_MIN, IS2M_MAX, IS2A20_MIN, IS2A20_MAX, '
      + 'WORK_BREAK, WFBX_BTM, WFBX_TOP, WFBM_BTM, WFBM_TOP, WFBA20_BTM, WFBA20_TOP, '
      + 'WFSX_BTM, WFSX_TOP, WFSM_BTM, WFSM_TOP, WFSA20_BTM, WFSA20_TOP, ROUTES_FACT, '
      + 'DISROUTMENT, WORK_END, WEP_TIME, WEP_ROUTES, WEF_TIME, WEF_ROUTES, WE_SS) '
      + 'VALUES (:ID, :ROUTDATE, :ROUTE, :SHEDULE, :SHIFT, :MIF, :GN, '
      + ':ATP, :SSPCORR, :SSP, :FACT, :REGUL, :PLAN_OUT, :FACT_OUT, :PLAN_IN, :FACT_IN, '
      + ':STOP1, :STOP2, :STATUS, :WORK_BEGIN, :WBP_TIME, :WBP_ROUTES, :WBF_TIME, '
      + ':WBF_ROUTES, :WB_SS, :IS1X_MIN, :IS1X_MAX, :IS1M_MIN, :IS1M_MAX, :IS1A20_MIN, '
      + ':IS1A20_MAX, :IS2X_MIN, :IS2X_MAX, :IS2M_MIN, :IS2M_MAX, :IS2A20_MIN, :IS2A20_MAX, '
      + ':WORK_BREAK, :WFBX_BTM, :WFBX_TOP, :WFBM_BTM, :WFBM_TOP, :WFBA20_BTM, :WFBA20_TOP, '
      + ':WFSX_BTM, :WFSX_TOP, :WFSM_BTM, :WFSM_TOP, :WFSA20_BTM, :WFSA20_TOP, :ROUTES_FACT, '
      + ':DISROUTMENT, :WORK_END, :WEP_TIME, :WEP_ROUTES, :WEF_TIME, :WEF_ROUTES, :WE_SS)');
     ParamByName('ID').AsInteger         := 10000;
     ParamByName('ROUTDATE').AsString    := Copy(M[3],6,255);
     ParamByName('ROUTE').AsInteger      := StrToInt(Copy(M[2],4,255));
     ParamByName('SHEDULE').AsInteger    := StrToInt(Copy(M[6],4,255));
     ParamByName('SHIFT').AsString       := Copy(M[8],4,255);
     ParamByName('MIF').AsInteger        := StrToInt(Copy(M[0],4,255));
     ParamByName('GN').AsString          := Copy(M[1],4,255);
     ParamByName('ATP').AsInteger        := IBQallrep.FieldByName('ATP').AsInteger;
     ParamByName('SSPCORR').AsInteger    := cor;
     ParamByName('SSP').AsInteger        := pln;
     ParamByName('FACT').AsInteger       := fct;
     ParamByName('REGUL').AsInteger      := IBQallrep.Fields[19].AsInteger;
     ParamByName('PLAN_OUT').AsString    := Copy(FullTimeAsStr(StrToInt(Copy(M[9],4,255))),1,5);
     ParamByName('FACT_OUT').AsString    := Copy(FullTimeAsStr(StrToInt(Copy(M[11],4,255))),1,5);
     ParamByName('PLAN_IN').AsString     := Copy(FullTimeAsStr(StrToInt(Copy(M[10],4,255))),1,5);
     ParamByName('FACT_IN').AsString     := Copy(FullTimeAsStr(StrToInt(Copy(M[12],4,255))),1,5);
     ParamByName('STOP1').AsInteger      := StrToInt(Copy(M[16],4,3)); s:=StrToInt(Copy(M[15],5,255));
     ParamByName('STOP2').AsInteger      := StrToInt(Copy(M[16+s],Pos('=',M[16+s])+1,3));
     ParamByName('STATUS').AsString      :='';
     ParamByName('WORK_BEGIN').AsString  :='';
     ParamByName('WBP_TIME').AsString    :='';
     ParamByName('WBP_ROUTES').AsInteger :=0;
     ParamByName('WBF_TIME').AsString    :='';
     ParamByName('WBF_ROUTES').AsInteger :=0;
     ParamByName('WB_SS').AsString       :='';
     ParamByName('IS1X_MIN').AsString    :='';
     ParamByName('IS1X_MAX').AsString    :='';
     ParamByName('IS1M_MIN').AsString    :='';
     ParamByName('IS1M_MAX').AsString    :='';
     ParamByName('IS1A20_MIN').AsString  :='';
     ParamByName('IS1A20_MAX').AsString  :='';
     ParamByName('IS2X_MIN').AsString    :='';
     ParamByName('IS2X_MAX').AsString    :='';
     ParamByName('IS2M_MIN').AsString    :='';
     ParamByName('IS2M_MAX').AsString    :='';
     ParamByName('IS2A20_MIN').AsString  :='';
     ParamByName('IS2A20_MAX').AsString  :='';
     ParamByName('WORK_BREAK').AsInteger :=0;
     ParamByName('WFBX_BTM').AsString    :='';
     ParamByName('WFBX_TOP').AsString    :='';
     ParamByName('WFBM_BTM').AsString    :='';
     ParamByName('WFBM_TOP').AsString    :='';
     ParamByName('WFBA20_BTM').AsString  :='';
     ParamByName('WFBA20_TOP').AsString  :='';
     ParamByName('WFSX_BTM').AsString    :='';
     ParamByName('WFSX_TOP').AsString    :='';
     ParamByName('WFSM_BTM').AsString    :='';
     ParamByName('WFSM_TOP').AsString    :='';
     ParamByName('WFSA20_BTM').AsString  :='';
     ParamByName('WFSA20_TOP').AsString  :='';
     ParamByName('ROUTES_FACT').AsString :='';
     ParamByName('DISROUTMENT').AsString :='';
     ParamByName('WORK_END').AsString    :='';
     ParamByName('WEP_TIME').AsString    :='';
     ParamByName('WEP_ROUTES').AsInteger :=0;
     ParamByName('WEF_TIME').AsString    :='';
     ParamByName('WEF_ROUTES').AsInteger :=0;
     ParamByName('WE_SS').AsString       :='';
     ExecSQL;
     CommitTrans;
   end;
   M.Free;
 end;
end;

procedure TAMainForm.ContinueTrans;
begin
 with IBTransaction do begin
 if not InTransaction then
   StartTransAction;
 end;
end;

procedure TAMainForm.CommitTrans;
begin
 with IBTransaction do begin
 if not InTransaction then Exit;
 try
   Commit;
 except
   Rollback;
 end;
 end;
end;


Рамиль   (2004-09-16 11:31:00) [25]

Slonco   (16.09.04 11:20) [5]
Давай код. от StartTransaction до Commit
Почему вытягивать надо клещами?


Slonco   (2004-09-16 11:30:00) [26]

Нет, циклов нет.
Я ж говорю - почти один в один скопировал уже написанный мной ранее блок.
Может у IBDatabase или IBTransaction имеют критичные по настройке свойства? Я все оставил по дефолту (кроме параметров подключения: пароль, имя пользователя, чапсет)


Sergey13   (2004-09-16 11:23:00) [27]

А цикла там никакого нет?


Sergey13   (2004-09-16 11:21:00) [28]

Что то сомниетльно мне что комит такие ошибки дает.


Slonco   (2004-09-16 11:20:00) [29]

Да, именно так. На Commit выдает указанную в самом начале ошибку.


Рамиль   (2004-09-16 11:15:00) [30]

Ты хочешь сказать, что у тебя код такого типа
 IBTransaction.StartTransaction;
 IBSQL.SQL.Text := 'insert into ...';
 IBSQL.ExecQuery;
 IBTransaction.Commit;

и он выдает ошибку?..


Slonco   (2004-09-16 11:15:00) [31]

Я использую пару десятков параметров. Проверял 8-ой параметр - все в норме :(


Slonco   (2004-09-16 11:06:00) [32]

Почему в 17-ой? SQL запрос у меня в одну строку!
Или мастера так шутить изволят?


Рамиль   (2004-09-16 11:04:00) [33]

Ошибка в семнадцатой строке.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо