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

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

Нарушение полосатости грида при SQL-запросах [D7, WinXP]


Страницы:   1 2 3 4

kyn66 ©   (2009-09-02 13:46:00) 

Добрый день. Когда то я здесь задавал вопрос по теме САБЖ. Решение вопроса так и небыло достигнуто. Сейчас я всетаки обнаружил ответ на этот вопрос и с радостью хочу поделиться со всеми, кто сталкивался с такой проблемой. Исходные данные:
TDBGridEx, TAdsQueryВо время  формирования запроса и сортировки по одному из полей, порядок следования цветных полос сбивался, когда я использовал вот это:

procedure TMainFrm.DBGridEh1GetCellParams(Sender: TObject;
 Column: TColumnEh; AFont: TFont; var Background: TColor;
 State: TGridDrawState);
begin
...
Const
 BackColors : array[Boolean] of TColor = (clWhite, clBtnFace);
...
 Background := BackColors[(Sender as TDBGridEh).DataSource.DataSet.RecNo mod 2 <> 0];
end;


Затем этот способ представления полосатости был заменен использование свойств самого TAdsQuery Sequenced. Но и после этого картина не изменилась! Сегодня я случайно обратил внимание еще на одно свойство SecuencedLevelи решил его проверить. Когда оно было по умолчанию slStandard- ничего не менялось. Но стоило мне его изменить на slExact- все заработало как нужно!!! "Полосатость" восстановилась при любых забросах. Так что, если кому это пригодится - запоминайте!


Anatoly Podgoretsky   (2009-09-04 15:58:00) [21]


> когда мы в чистый TTable перегоняем заранее отсортированные
> квериком данные и не применять к нему ничего (фильтр, сортировка),
>  просто вывести в гриде и все. И RecNo будет в поряде.

Никогда не будет в порядке. Особенно с абстрактным форматом.


Сергей М.   (2009-09-04 15:48:00) [22]

СУБД-то какая ?
К 40-му посту можно было бы сподобиться и открыть наконец тайну)


kyn66   (2009-09-04 15:33:00) [23]


> на самом деле это ситуации не меняет

НУ почему? Не буду сильно настаивать, но мне кажется, когда мы в чистый TTable перегоняем заранее отсортированные квериком данные и не применять к нему ничего (фильтр, сортировка), просто вывести в гриде и все. И RecNo будет в поряде. Для промежуточных отображений я к примеру часто использую TrxMemoryData.


Сергей М.   (2009-09-04 15:26:00) [24]


> я в цикле должен перегнать полученные данные в новый TTable(к
> примеру)


Хоть перегоняй хоть не перегоняй, но "много" так или иначе должно быть известно. Именно от него пляшет свойство дейтасета RecNo.

Ну ты сам подумай - откуда произвольный компонент-дейтасет возьмет значение RecNo для любой записи, кроме первой, если ему неизвестно, сколько всего записей в откытом им НД ?


Anatoly Podgoretsky   (2009-09-04 15:25:00) [25]

> kyn66  (04.09.2009 15:10:37)  [37]

Это только тебе кажется, что все будет в порядке, на самом деле это ситуации не меняет.


kyn66   (2009-09-04 15:10:00) [26]


> это самое "много" в любом случае надо знать.


Получается, что после того как кверик с запросом отработает, я в цикле должен перегнать полученные данные в новый TTable(к примеру) и уж только его привязывать к гриду. Тут -то тогда будет все пучком, все записи будут упорядочены по порядку. Это называется в обход огородами :)


kyn66   (2009-09-04 15:07:00) [27]


> Может быть все таки на недопонимание сущности?

Уже недопонимание цитаты. По новой начнем обсуждать?


Сергей М.   (2009-09-04 14:25:00) [28]


> А если число записей будет очень много?


Да без разницы сколько - это самое "много" в любом случае надо знать.


Anatoly Podgoretsky   (2009-09-04 13:21:00) [29]

> kyn66  (04.09.2009 12:51:33)  [33]

Может быть все таки на недопонимание сущности?


kyn66   (2009-09-04 12:51:00) [30]

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


Anatoly Podgoretsky   (2009-09-04 12:27:00) [31]

> kyn66  (04.09.2009 11:57:31)  [31]

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


kyn66   (2009-09-04 11:57:00) [32]


> сходил в его конец, вернулся назад в начало, при этом получил
> актуальное значение RecordCount

А не много манипуляций? А если число записей будет очень много? Долгого зависа не получится?


Anatoly Podgoretsky   (2009-09-04 11:41:00) [33]

> Сергей М.  (04.09.2009 11:16:27)  [27]

Ну не все же телепаты и в итоге возникает нарушение и его непонимание.


Anatoly Podgoretsky   (2009-09-04 11:40:00) [34]

> kyn66  (04.09.2009 10:57:23)  [23]

Я бы не смирился, я бы просто убил.


Медвежонок Пятачок   (2009-09-04 11:23:00) [35]

а все потому, что кто-то не будем говорить кто поленился сделать паблик свойство "номер строки в гриде"


Сергей М.   (2009-09-04 11:16:00) [36]


> Anatoly Podgoretsky


Ну это подразумевалось)


Сергей М.   (2009-09-04 11:16:00) [37]


> в SQL-buildere ввел такой-же запрос... все отработало нормально


Значит SQL-builder окрыл НД с клиентским курсором, сходил в его конец, вернулся назад в начало, при этом получил актуальное значение RecordCount. А дальше все объяснимо с простотой пареной репы)


Anatoly Podgoretsky   (2009-09-04 11:12:00) [38]

> Сергей М.  (04.09.2009 10:32:22)  [22]

Опять же забыл кое что.
Не должно быть фильтров и локальной сортировки если они не исправляют логические номера, а в случае с OnFilterRecord вообще решения нет.


Anatoly Podgoretsky   (2009-09-04 11:11:00) [39]

> Сергей М.  (04.09.2009 10:32:22)  [22]

Дополнение, номера записей должны быть логическими, а не физическими.


kyn66   (2009-09-04 10:57:00) [40]


> правильная волосатость


Решь шла о полосатости
> поэтому все примеры, реализуют только частичную.


Т.е. нужно смириться с тем, что хоть это делает?

> Если гриду эта информация по тем или иным причина недоступна,
>  красить он будет как попало.

Все очень доходчиво. Т.е. не будем от него требовать невозможного, хотя кто знает, может авторы пересмотрят этот вопрос. Мучает одна непонятка... Почему же тогда в утилите Arc32? написанной на базе в том числе этих-же компонентов полосатость всегда четкая. Я сознательно в SQL-buildere ввел такой-же запрос... все отработало нормально. ЛАдно, выходит тему можно считать закрытой, но до конца не раскрытой. Всем спасибо за участие в дебатах.


Страницы:   1 2 3 4

Наверх

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