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

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

Как правильно быстрее найти элемент с ошибкой List index out of b [D7, WinXP]


Страницы:   1 2

KBO78 ©   (2015-03-09 15:05:00) 

Доброе всем время суток.
У меня появилась ошибка «List index out of bounds (-1)», я знаю она появляется тогда, когда обращаясь к определенному элементу, выходишь за рамки списка. В моем случае, ошибка происходит, когда я явно не дергаю явный элемент, но все же какой-то дергается.
Ошибка вылетает на
     begin
showmessage('k3’);
       ibdsWord.Close; //error
showmessage('k4 go');
       ibdsWord.SelectSQL.Clear;
       ibdsWord.SelectSQL.Add(ARequire);
       ibdsWord.FetchAll;
       ibdsWord.Open;
       ibdsWord.First;
     end;

закрытии Dataset.
Причем странно то, что весь блок выполняется (без ошибки) в режиме «step over». Где тут собака зарыта?

Заранее спасибо


KBO78   (2015-03-11 13:54:00) [1]

После "Begin"
"вырубил" отображение изменений всем конкретным компонентам, методом
ibdsWord.DisableControls;
а перед "end" - включил - "ibdsWord.EnableControls;"


Dennis I. Komarov   (2015-03-10 17:45:00) [2]

Выкинуть все DB GUI компоненты и будет счастье


KBO78   (2015-03-10 16:03:00) [3]

Rouse_
спасибо, посмотрю


Rouse_   (2015-03-10 15:02:00) [4]

Если под отладчиком, то иди в модуль SysUtils, и становись бряком на вот таком коде:

procedure Exception.RaisingException(P: PExceptionRecord);
begin
 SetInnerException; // <<< вот тут ставь бряк


как поднимется исключение, смотри CallStack, в котором и будет показано что происходило перед генерацией исключения.


sniknik   (2015-03-10 12:35:00) [5]

> Хорошо, а как надо обрабатывать TDBRadioGroup, чтоб он не выкидывал
хорошо, а как надо правильно открывать окно чтобы не взрывалось ... ?  

"утечку" устрани. блин... хочется написать то что в [15]/[17] похоже было написано.


Плохиш   (2015-03-10 12:35:00) [6]


> Хорошо, а как надо

проверять наличие элементов, ну или нанять программиста.

PS. кстати, здесь не любят партизан, не показывающих сразу необходимый код.


KBO78   (2015-03-10 12:24:00) [7]

Хорошо, а как надо обрабатывать TDBRadioGroup, чтоб он не выкидывал

«List index out of bounds (-1)»

в конкретном месте? (во время переоткрытия dataset)


KBO78   (2015-03-10 12:23:00) [8]

Хорошо, а как надо обрабатывать TDBRadioGroup, чтоб он не выкидывал

«List index out of bounds (-1)»

в конкретном месте? (во время переоткрытия dataset)


sniknik   (2015-03-10 11:35:00) [9]

> Я просто на время выполнения запроса, заблокировал компонент  dbrgStatistica.Enabled := false; правильно?
> Но в результате работает. :-)
затычка по аналогии - до включения пылесоса открываю окно, и взрыва нет. правильно?

нет, не правильно.
ладно повезло, день ветреный, успевает проветрится, а попадется на штиль?


sniknik   (2015-03-10 11:30:00) [10]

вот это "пылесос"
> dbrgStatistica.Enabled := true;
да не включил, искры нет, взрыва нет...

а это
> ibdsWord.FetchAll;
> ibdsWord.Open;
"утечка газа" скорее всего. из-за не полных(не выбранных) данных и бывают значения позиций/количества записей в -1.

на что в общем то явно указывает
> List index out of bounds ( -1)
и если там все построено на "позиционной навигации"... понятно все в общем.


Плохиш   (2015-03-10 00:10:00) [11]


> У меня появилась ошибка «List index out of bounds ( -1)»

Попытка обратиться к элементу пустого списка.

> Я просто на время выполнения запроса, заблокировал компонент
>  dbrgStatistica.Enabled := false;
> правильно?
>

Неправильно. 100% в твоих обработчиках событий этого dbrgStatistica говнокод без проверок.


KBO78   (2015-03-09 22:28:00) [12]

кгшзх

Нашел, такую пакость мне делает TDBRadioGroup (dbrgStatistica)
procedure TFMain.dbrgStatisticaChange(Sender: TObject);
begin
 if (cbMethodSort.ItemIndex = 4)
   and (dbrgStatistica.ItemIndex = 0) then
   begin
       dbrgStatistica.Enabled := false;
       ibdsWord.Close; //error
       ibdsWord.SelectSQL.Clear;
       ibdsWord.SelectSQL.Add(ARequire);
       ibdsWord.FetchAll;
       ibdsWord.Open;
       ibdsWord.First;
       dbrgStatistica.Enabled := true;
     end;
   end
end;


Я просто на время выполнения запроса, заблокировал компонент   dbrgStatistica.Enabled := false;
правильно?
Но в результате работает. :-)


кгшзх   (2015-03-09 17:20:00) [13]

Удалено модератором


KBO78   (2015-03-09 17:20:00) [14]

проверяю :-( их не так уж и мало


кгшзх   (2015-03-09 17:17:00) [15]

Удалено модератором


KBO78   (2015-03-09 17:12:00) [16]

т.е. с утечкой газа - понятно - это отдельный процесс (и его нужно поискать), и утечка происходит всегда
ну а все же "step over" - это тогда сверх сила, которая может сказать, что от искры в розетке ни какого взрыва быть не может, даже если будет утечка газа.


кгшзх   (2015-03-09 16:46:00) [17]

у тебя на кухне утечка газа.
ты про это еще не знаешь.
заходишь на кухню, и включаешь в розетку пылесос.
в розетке проскакивает искра и кухня взрывается.

ты после этого будешь так же твердолобо искать причину взрыва в пылесосе?
ведь кухня взорвалась аккурат после того как пылесос включили в розетку.


KBO78   (2015-03-09 16:38:00) [18]

Хорошо я знаю, что она где-то происходит, но смена режима на пошаговый, не может же пропустить злопулучное место и дойти до конца, без ошибки, как не в чем не бывало (в моем случае вывести выборку в dataset)...?


junglecat   (2015-03-09 16:28:00) [19]

> ibdsWord с связан с datasource

а этот датасорс к какому-нибудь визуальному контролу прицеплен?


кгшзх   (2015-03-09 16:21:00) [20]

я знаю на какой строке.

ты не знаешь на какой строке она происходит, тебе только кажется что она там.
поэтому и появилась эта ветка.


Страницы:   1 2

Наверх

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