Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

Grid index out of range   Найти похожие ветки 

 
Алексей Петухов   (2006-09-03 14:15) [0]

Здавствуйте, уважаемые мастера.

Вот вылетает ошибка "Grid index out of range" при вызове
Query.locate("id",id,[])
(еле еле отловил это место! )

ошибка возникает не всегда! а очень редко!
где можно посмотреть? как определить с чем конкрено это связанно?

Заранее благодарю за помощь.


 
Desdechado ©   (2006-09-03 14:27) [1]

У меня на D7 эта ошибка обычно вылазит, если при растягивании колонки мышу вытащить куда-то далеко за форму, причем рывком дернуть и бросить.
Искал, потом забил...


 
Anatoly Podgoretsky ©   (2006-09-03 14:57) [2]

В этом месте Query.locate("id",id,[]) ошибки не будет, даже если id чепуха
Ищи в обработчиках


 
sniknik ©   (2006-09-03 15:08) [3]

Desdechado ©   (03.09.06 14:27) [1]
грид естественно какойнибудь нестандартный? (ни разу не было, но "левыми" я как раз и не пользуюсь)


 
Desdechado ©   (2006-09-03 15:09) [4]

Как раз наистандартнейший, другими не пользуюсь.


 
sniknik ©   (2006-09-03 15:21) [5]

тогда остается 2 варианта, твой код или глюки винды (или моя невнимательность но это можно исключить после 50ти дерганий расятягиваемой колонки за форму...)

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


 
Desdechado ©   (2006-09-03 15:41) [6]

Это происходит не в любых условиях и не на любом гриде в программе.
Но закономерности я не смог выявить :(


 
Desdechado ©   (2006-09-03 15:48) [7]

Вот и сейчас новым взглядом на старую поблему решил глянуть.

На форме 2 грида, не подключенные к источникам данных.
Один - просто на форме, другой - на TabControl"е. В первом 2 колонки, сделанных вручную, во втором - одна. TabControl стоит вплотную к правому краю формы, грид на нем alClient. Дергаю за разделитель колонок на нем, на 2-3 раз обычно имею указанную ошибку. Иногда, правда, не повторяется.

Никаких обработчиков нет в принципе. XP Home SP2, D7 Upd1


 
Алексей Петухов   (2006-09-03 18:12) [8]

Ёлы-палы :-)

может правда грид на нестандартный заменить.

я в шоке - такого никогда не случалось ещё со мной (не могу понять где ошибка в моём собственном коде).

грид вполне стандартный, есть правда обработчик DrawColumnCell, но он номально вроде проскакивает всегда.

Я ещё для отлова этой ошибки организовал журнал отладки, туда также картинки формы сбрасываются при ексепшоне так там я заметил грид какото недорисованный.


 
Desdechado ©   (2006-09-04 12:21) [9]

Desdechado ©   (03.09.06 15:48) [7]
Сорри, на PageControl"е. Причем повторяется на разных компах с разными операционками. Поэтому здесь на винду грешить не стоит.
Проект-то пустой...


 
Плохиш ©   (2006-09-04 12:29) [10]


> Алексей Петухов   (03.09.06 18:12) [8]


> грид вполне стандартный, есть правда обработчик DrawColumnCell,
>  но он номально вроде проскакивает всегда.

Ну вот через пару дней нам приведут глючный код из ентого обработчика.


 
Anatoly Podgoretsky ©   (2006-09-04 12:34) [11]

Не пройдет и полгода, а потом окажется, что есть и другие обработчики.


 
sniknik ©   (2006-09-04 13:18) [12]

> Сорри, на PageControl"е.
вставь обработку на грид который на нем (одна колонка! (думать не хочется ;о)))

procedure TForm1.DBGrid2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var ind: integer;
begin
 with DBGrid2 do begin
   if dgIndicator in Options then ind:= 12
                                    else ind:= 0;
   if Columns.Items[0].Width+ind > ClientWidth then
     Columns.Items[0].Width:= ClientWidth-ind;
 end;    
end;


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


 
sniknik ©   (2006-09-04 13:20) [13]

ну да, естественно, лучше
with TDBGrid(Sender) do begin


 
Desdechado ©   (2006-09-04 13:44) [14]

sniknik ©   (04.09.06 13:18) [12]
Ну, это бубен...
Но у него тоже не все хорошо. Например, при изменении размера грида следующее изменение ширины колонок подрезает ее по новому размеру грида, что не всегда нужно.
Хотя пока ошибку не дает.


 
sniknik ©   (2006-09-04 16:58) [15]

> Ну, это бубен...
это локализует глюк, неважно бубен это или нет.

> Хотя пока ошибку не дает.
это хорошо.

тогда скопируй к себе в проект и подключи к нему модуль Grids (генофонд не править)
в нем найди процедуру CalcAxisState (вложенная в TCustomGrid.CalcSizingState) и исправь строку
//Index := LastFullVisibleCell + 1;
на
Index := LastFullVisibleCell;

(возможно это чтото "сломает", пока не вижу что, но проблему уберет (и "западение" ширины тоже), а "подрезания" в [14] не будет)

пробуй. (то что в 12 давал убери)


 
Desdechado ©   (2006-09-04 17:44) [16]

> это локализует глюк
Каким образом?

Попробовал. Вроде не валится. Но
> возможно это чтото "сломает"
т.к. дальше проверки глюка ничего не делал. Как на других аспектах жизнедеятельности гридов (всех потомков) скажется, хз.

PS сам догадался или на quality central откопал?


 
sniknik ©   (2006-09-04 20:19) [17]

> Каким образом?
по логике, при затягивании размера за форму (тем способом что описано у тебя) наблюдается странное "западение" ширины, вернуть нельзя. вот мне и показалось логичным, что это связано, первый код как раз воссанавливал "правильную" ширину, и раз у тебя глюк от этого пропал, то значит связано, и искать надо в расчетех номера столбца от его размера (который "западает").  

> PS сам догадался или на quality central откопал?
что такое quality central?
и зачем догадываться если есть трассировка? посмотреть/протрассировать код расчета и увидеть странность что первое значение (затягивание) расчитывается, а второе почемуто берется сохраненное + 1 несложно. зачем это сделано не знаю (может и есть причина) но сделав изменения увидел что "западение" исчезло, хотя код перерасчета убрал. логично что и связанный глюк должен был исправиться.


 
Desdechado ©   (2006-09-05 12:54) [18]

> что такое quality central?
http://qc.borland.com/
Там иногда интересные неофициальные патчи генофонда предлагают.

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


 
sniknik ©   (2006-09-05 15:00) [19]

> детально пока не копался в направлении побочных эффектов.
аналогично... нароеш чегонибудь сообщи (а то я уже себе в новом проекте поменял... ;о)), удобно в общемто, что ширина колонки не "западает", в старых полазил везде такая фигня... просто до этого не обращал внимания.).


 
Алексей Петухов   (2006-09-05 17:26) [20]

Спасибо, братцы :-)
Мысли были в исходниках грида покопаться, но нехватило боевого духа ! :-)

Буду пробовать, если что - сразу к Вам.


 
Алексей Петухов   (2006-09-05 22:44) [21]

Короче, что то с борлондовкими гридами "не то" :-)
Мою так просто проблема не решилась, пришлось код потрассировать :-)

В общем так:
условия:
1) грид.алигн=клиент
2)
   query.close
   query.open
   query.locate //exception

или
   query.disablecontrols
   query.close
   query.open
   query.locate
   query.enablecontrols //except

3) обязательно: на гриде должны быть оба скролла!
4) растянуть форму так, чтобы немного не хватало места для прорисовки ещё одной строки в гриде.
5) а также необходимо добиться такого кол-ва строк, чтобы при установке курсора на предпоследнюю строку (ставим курсор в конец, потом перемещаемся на строку вверх (нижнюю строку видно)) locate (т.е. приведённый выше код) "сбивал" грид так, чтобы строки перемещались вниз, т.е. пряталась последня строка.

Вот если удалось добится такой ситуации, то ставим курсор на последнюю строку и делаем locate (п.2)! Вот она ошибочка!

ошибку генерит всё тотже Grids
в процедуре
MoveCurrent, вызванной из MoveColRow

Вот так.

Искать ошибки  и править код не стал а сделал так:
 try
   qySprav.DisableControls;
   qySprav.Locate("id",curr_id,[]);
   qySprav.EnableControls;
 except
   qySprav.Last;
 end;


Вроде пока живет :-)


 
sniknik ©   (2006-09-05 23:31) [22]

> Короче, что то с борлондовкими гридами "не то" :-)
с неборландовскими "навороченными" наверняка тоже самое, ибо сделаны они по образу и подобию... с в общемто небольшими и некоодинальными изменениями основы. (у кого есть возможность/легко проверить? не буду изза этого ставить "левое")

> Искать ошибки  и править код не стал а сделал так:
DisableControls/EnableControls... я бы так сделал даже без всякой ошибки...

> Вот если удалось добится такой ситуации, то ...
нда, удалось бы...

============================
- доктор, что со мной, если я зажимаю нос и дотрагиваюсь языком до комочка фольги в которой пекли кортошку, у меня начинает покадывать за ухом?
- !!!???... батенька, да у вас просто куча свободного времени!

p.s. не влом, слепи проект в одну форму с минимумом компонент и предустановленной описанной ситуацией, чтобы был глюк, и пришли мне.



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

Форум: "Базы";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.047 c
6-1149542592
CShooter
2006-06-06 01:23
2006.10.29
NMpop31.GetMailMessage(NMpop31.MailCount) выдает ERangeError


11-1128235367
Sniper17
2005-10-02 10:42
2006.10.29
А если перейти на SVN?


1-1158512916
Павел И
2006-09-17 21:08
2006.10.29
Проблемы с выделением памяти в потоках


15-1160236750
Furyz
2006-10-07 19:59
2006.10.29
Core wars


2-1160418334
dreamse
2006-10-09 22:25
2006.10.29
создание формы динамически





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский