![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при IBTransaction.Commit - "List index out of bounds (8)" [D7, IB6.x]
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]Ошибка в семнадцатой строке.