Форум: "Начинающим";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
ВнизКак правильно быстрее найти элемент с ошибкой 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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.057 c