Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.01.15;
Скачать: CL | DM;

Вниз

Как правильно быстрее найти элемент с ошибкой List index out of b   Найти похожие ветки 

 
KBO78   (2015-03-09 15:05) [0]

Доброе всем время суток.
У меня появилась ошибка «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-09 15:14) [1]

Да, притом что события "BeforeClose"б "AfterClose" - пустые


 
кгшзх ©   (2015-03-09 15:26) [2]

а может поискать не там где светло, а там где идет работа со списком?


 
KBO78   (2015-03-09 15:32) [3]

например?
т.е. это мне нужно проверить все "combobox", "listbox" и т.п.?


 
кгшзх ©   (2015-03-09 15:35) [4]

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


 
KBO78   (2015-03-09 15:52) [5]

Хорошо, над этим я сейчас буду думать...
а что настет режима «step over», почему он не спотыкается? (я та думал им до истыны докапаться - а тут такой облом :-( )


 
junglecat ©   (2015-03-09 16:01) [6]

> ibdsWord.FetchAll;
>       ibdsWord.Open;

и это работает? не наоборот надо?

ibdsWord с чем связан? через datasource или еще как-то


 
кгшзх ©   (2015-03-09 16:10) [7]

почему он не спотыкается?

потому что нет ошибки там, где ты ее ожидаешь увидеть.
вот и не спотыкается


 
KBO78   (2015-03-09 16:11) [8]

ibdsWord с связан с datasource,
до позавчера все работало (как и последние 4 года) ... да я конечно вносил изменения, но не такие уж голобальные


 
KBO78   (2015-03-09 16:16) [9]

потому что нет ошибки там, где ты ее ожидаешь увидеть.
вот и не спотыкается


ну у меня же не многопотоковое приложение, и ошибка вылетает, я знаю на какой строке. Я специально "showmessage" поставил
или не так? (т.е. я думал шаг за шагом...)


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

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

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


 
junglecat ©   (2015-03-09 16:28) [11]

> ibdsWord с связан с datasource

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


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

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


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

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

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


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

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


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

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


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

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


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

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


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

кгшзх

Нашел, такую пакость мне делает 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-10 00:10) [19]


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

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

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

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


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

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

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

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


 
sniknik ©   (2015-03-10 11:35) [21]

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

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


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

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

«List index out of bounds (-1)»

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


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

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

«List index out of bounds (-1)»

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


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


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

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

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


 
sniknik ©   (2015-03-10 12:35) [25]

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

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


 
Rouse_ ©   (2015-03-10 15:02) [26]

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

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


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


 
KBO78   (2015-03-10 16:03) [27]

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


 
Dennis I. Komarov ©   (2015-03-10 17:45) [28]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2017.01.15;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.022 c
15-1455112145
gedevan
2016-02-10 16:49
2017.01.15
Компонент для построения блок схем


15-1445860992
DayGaykin
2015-10-26 15:03
2017.01.15
PHP и Java для Web


2-1427465762
Token
2015-03-27 17:16
2017.01.15
Как задать имя файла компиляции


15-1456034417
pavelnk
2016-02-21 09:00
2017.01.15
Слёзы яндекса


15-1455112976
K-1000
2016-02-10 17:02
2017.01.15
Canvas. Вывести зеркальное изображение с альфой?