![]() |
| ||
|
|
Новости |
Поиск |
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 16:39:00) [1]%) ...надо меньше пить... :*)
Рамиль (2004-09-16 16:35:00) [2]Slonco (16.09.04 16:26) [31]
повесил на OnChange компонента DBMemo
:o)
Slonco (2004-09-16 16:26:00) [3]Да то не цикл был!
Я просто вызов этой процедуры повесил на OnChange компонента DBMemo. Вышло так, что эта процедура 2 раза вызывалась... или как-то там еще, по хитрому... %)
Рамиль (2004-09-16 16:17:00) [4]А ведь спрашивали насчет циклов!:)
Slonco (2004-09-16 15:50:00) [5]>>IBQallrep.Fields[19].AsInteger;
>А с этим все нормально? Есть стока?
Этот я подправил - ничего не дало...
Я понял в чем дело - у меня там рекурсия вышла :)
Прошу простить за потраченное впустую время :(
Всем СПАСИБО!
Sergey13 (2004-09-16 15:42:00) [6]>IBQallrep.Fields[19].AsInteger;
А с этим все нормально? Есть стока?
Slonco (2004-09-16 15:38:00) [7]Все до единой!!!
Sergey13 (2004-09-16 15:29:00) [8]Все строки пробовал?
Slonco (2004-09-16 15:21:00) [9]Попробовал все - без толку.
Slonco (2004-09-16 15:16:00) [10]Ладно, попробую...
Sergey13 (2004-09-16 15:14:00) [11]2[21] Slonco (16.09.04 15:07)
По очереди давай значение параметру напрямую в коде корректным значением. типа
ParamByName('STOP2').AsInteger := 12;
Поймешь где ошибка. А она где то здесь. ИМХО
Slonco (2004-09-16 15:13:00) [12]И еще. Во время формирования ошибки не может быть - т.к. ExecSQL прогоняется без ошибки - ошибка только после Commit!
Slonco (2004-09-16 15:07:00) [13]В списке строк М около 500 строк и s=12, так что 12+16 никак не превысят 500.
Значения все проверил - за пределы НИ ОДНО из них не вышло!
Что делать - ума не приложу :'(
Johnmen (2004-09-16 12:40:00) [14]>Sergey13 © (16.09.04 12:35) [19]
Ну разве что...:)
Тогда не помешает после формирования текста сделать Prepare.
Sergey13 (2004-09-16 12:35:00) [15]2[18] Johnmen © (16.09.04 12:32)
>1. Зачем параметры в динамически изменяемом запросе ? Смысл ?
Что бы самому потом прочитать то что написал. Иначе башку сломаешь. 8-)
Johnmen (2004-09-16 12:32:00) [16]Пара замечаний.
1. Зачем параметры в динамически изменяемом запросе ? Смысл ?
2. Стартовать тр-ию перед ExecSQL.
И, как сказали выше, ошибка в индексе стринглиста. Однозначно !
Danilka (2004-09-16 12:28:00) [17]поставь точку останова вот-сюда:
ParamByName('STOP2').AsInteger := StrToInt(Copy(M[16+s],Pos('=',M[16+s])+1,3));
и посмотри чему у тебя равен s, а также количество строк в M, скорее всего, оно будет меньше чем 16+s.
Sergey13 (2004-09-16 12:27:00) [18]Например через присваивание такого же значения "левой" переменной.
Slonco (2004-09-16 12:24:00) [19]А как смотреть в дебаггере значения параметров? Через очки? Или есть хитрый способ о котором я не знаю?
Sergey13 (2004-09-16 12:19:00) [20]2[13] Slonco (16.09.04 12:11)
>Боюсь, что придется отказаться от параметров ради проверки...
Можно и просто в отладчике посмотреть значения. Можно просто по очереди отключать параметры (и поле соответственное), пока ошибка не уйдет.