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

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

Пройти все строки Query при fetch [D5]


Страницы:   1 2

{bas} ©   (2003-11-24 19:04:00) 

Хочу приципиться к какому-то событию для того, что бы при добавлении новой записи из БД в TQuery(у меня TORAQuery) я мог посмотреть значения каждого поля. Но не знаю к какому. Подскажите??
Может быть не очень понятно. Вот задача:
Когда мы делаем открытие датасета, то он заполняется данными из БД. Я хочу, что бы при каждом заполнении строчки в дадасете, я мог бы посмотреть все поля данной строчки. Похоже на событие ONDrawColumnCell у TDBGrid, но немного не то, так как здесь можно приципиться к каждой строчке, которая видна на экране, а надо ко всем строкам выбранных в датасет.


Danilka   (2003-11-25 12:00:00) [1]

потому-что он действует не напрямую, а через посредника.
см, например, реализацию функции TCustomDBGrid.DrawCell


{bas}   (2003-11-25 11:46:00) [2]

>> All
Ладно, можно сказать я уже вам поверил, но почему я не могу найти в исходниках ни одного Next(метод DataSet), и не одного цикла по записям датасета???


Danilka   (2003-11-25 11:35:00) [3]

[31] {bas} © (25.11.03 11:21)
в самом ДБгриде нет никаких записей. он только рисует записи датасета. естественно, если его попросят их заново нарисовать, он опять полезет в датасет за ними.


{bas}   (2003-11-25 11:21:00) [4]

>> Плохиш_ (25.11.03 11:15) [27]
Хотел бы.... И при рефреше, все видимые записи снова перебираются??


Danilka   (2003-11-25 11:20:00) [5]

[26] {bas} © (25.11.03 11:14)
>А что он делает при рефреше, то же самое??
при рефреше он делает то-же самое, что и его родитель TControl.
по-секрету, скажу что он делает, он делает repaint.


Reindeer Moss Eater   (2003-11-25 11:19:00) [6]

Да не хочу я растягивать грид, пускай он рисует, как и рисовал, я хочу найти событие у ДатаСета, что бы привязаться к нему, когда он зачитывает данные из БД..

Тогда распрощайся с оглубой мечтой посчитать сумму по ВСЕМ зафетченным записям. Невидимые записи останутся без его (грида)внимания


Nikolay M.   (2003-11-25 11:18:00) [7]


> {bas} © (25.11.03 11:07) [23]
> >> Nikolay M. © (25.11.03 10:35) [20]
> Не зная специфику нельзя судить...

Где и о чем я судил, ткни пальцем?

ИМХО, апдейтить данные с такой частотой - дико. Но я не удивляюсь, потому что встречался с разными заказчиками - видел и не такое. А поскольку постановщик задач часто сам не знает, что хочет, то я бы на твоем месте предложил представлять данные в виде графика, как это делает Task manager в хронологии загрузки процессора - это более естественно.


Плохиш_   (2003-11-25 11:15:00) [8]

>{bas} © (25.11.03 11:14) [26]

А ты в этом, что всё ещё сомневаешься?


{bas}   (2003-11-25 11:14:00) [9]

>> Reindeer Moss Eater © (25.11.03 10:42) [21]
>> Ты хочешь программно растягивать грид так, что бы ВСЕ записи влезли на экран не считаясь с желанием пользователя?
Понимаю такой изврат (допускаю что может такое прийти в голову).

Да не хочу я растягивать грид, пускай он рисует, как и рисовал, я хочу найти событие у ДатаСета, что бы привязаться к нему, когда он зачитывает данные из БД..

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

Т.е. хотите сказать, что ДБгрид делает то же самое, при открытии датасета он проходит все его записи(т.е. те записи, кот. влезают в видимую область) и прорисовывает все поля, А что он делает при рефреше, то же самое??


Reindeer Moss Eater   (2003-11-25 11:11:00) [10]

Ну зачем тебе грид?
Только потому что он сколит по записям при открытии датасета?
И это его качество ты хочешь использовать в корыстных целях?
Типа сэкономить на цикле while not eof do next?


Danilka   (2003-11-25 11:11:00) [11]

садист. чел только нацелится мышой, а цифирька возьмет и изменицца - 10герц не хухры-мухры.

кстати, забавно будет на граничных значениях, когда число будет прыгать, например, с 4 на 5 и обратно 10 раз в секунду. интересно, можно будет разглядеть, что там на самом деле написано?

а грид, наверняка делает примерно так (упрощенно, очень, если он всегда с 1 записи все кажет):
dataset.first;
for i:=1 to maxvisible do begin
...
dataset.next;
end;

только вот, уверен, ничего это тебе не даст..


{bas}   (2003-11-25 11:07:00) [12]

>> Polevi © (25.11.03 10:33) [19]
У грида не нашел такого свойства, но это соб. происходит, когда грид рисует, а мне надо, когда он берет информацию из датасета
>> Nikolay M. © (25.11.03 10:35) [20]
Не зная специфику нельзя судить...


Sergey13   (2003-11-25 10:46:00) [13]

2{bas} © (25.11.03 10:30) [18]
"трейдерская система" - это что такое по сути и по русски? Зачем так часто обновлять данные?

> Я ще не говорю, что все сделано очень правильно, возможно не совсем верно...
Я бы сказал совсем не верно, судя по твоим описаниям задачи. Выход подсказал Reindeer Moss Eater © (24.11.03 19:49) [13]


Reindeer Moss Eater   (2003-11-25 10:42:00) [14]

Не проще будет расказать как прорисовку делает грид??

Я тебе уже сказал как он это делает.
Рисует пока есть место у него в клиентской области.
При этом за данными ходит в свой датасорс. Если место кончилось, то он никуда не пойдет.

Ты хочешь программно растягивать грид так, что бы ВСЕ записи влезли на экран не считаясь с желанием пользователя?
Понимаю такой изврат (допускаю что может такое прийти в голову).
Не понимаю только зачем при этом в качестве визуализатора выбран грид, а не стринггрид например, или рисование по канве или вывод в мемо.
Открыл датасет, прошел 1 раз по записям, отрисовал все, заодно посчитаешь свою сумму по всем строкам.


Nikolay M.   (2003-11-25 10:35:00) [15]

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


Polevi   (2003-11-25 10:33:00) [16]

OnPaint


{bas}   (2003-11-25 10:30:00) [17]

>> Reindeer Moss Eater © (25.11.03 09:19) [16]
Не проще будет расказать как прорисовку делает грид?? Я понимаю, что после прорисовки видимой области грид не будет дергать датасет, а я хотел его дергать дальше до конца по аналогии, как делает грид.

>> Sergey13 © (25.11.03 09:53) [17]
Я указал самый худший вариант, который тоже надо обрабатывать -чаще рефреш происходит около 2-5 раз в сек. 10-20 записей.
Я ще не говорю, что все сделано очень правильно, возможно не совсем верно...

НО хотелось узнать, на какое событие грид прорисовывает поля, возможно удастся сделать по аналогии...????


Sergey13   (2003-11-25 09:53:00) [18]

2{bas} ©
Обалдеть!!! Грид обновляется 10 раз в секунду!!! Ты уж доведи до 24 раз. Тогда мелькание будет незаметно. 8-)
Интересно, а что еще успевает делать твоя программа между фетчами "до 100 записей" 10 раз в секунду.

Вывод.
ИМХО.
Неправильно поставленная задача - прямой путь к неправильному решению проблемы.


Reindeer Moss Eater   (2003-11-25 09:19:00) [19]

Даже если знаю я и узнаешь ты, это ну никак тебе не поможет посчитать сумму по всем зафетченным строкам на клиенте (через события или код грида).
Почему?
Потому, что если зафетчено скажем 11 записей (и реально они уже в буфере клиента), но размеры грида на экране таковы, что в нем можно отрисовать 9 строк, то он (грид) после отрисовки девятой записи больше не будет дергать свой датасорс. Вплоть до того момента когда по его мнению не придет пора рисовать 10 и 11 строки.
Количество строк у тебя меняется, пользователь волен менять системный шрифт в системе и его размер а так же размеры окна с гридом.
Поэтому с этой стороны идти даже не стоит начинать.


{bas}   (2003-11-24 20:08:00) [20]

>>Reindeer Moss Eater © (24.11.03 19:49) [13]
Так то оно так, вообщем и так можно делать, но там еще есть подводные камни. Долго объяснять.. Да и переделывать довольно много. В общем не знаешь как делает прорисовку грид??


Страницы:   1 2

Наверх

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