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

Вниз

Пройти все строки Query при fetch   Найти похожие ветки 

 
{bas}   (2003-11-24 19:04) [0]

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


 
Reindeer Moss Eater   (2003-11-24 19:05) [1]

А зачем?
А после открытия нельзя?


 
{bas}   (2003-11-24 19:17) [2]

У меня просто очень динамическая система(рефреш таблицы делается до 10 раз в сек.) и что бы не терять время на перебор строк после открытия, хотел повесить подсчет суммы на фетч каждой строки


 
Reindeer Moss Eater   (2003-11-24 19:21) [3]

Подсчет суммы чего?
А те строки, которые попадают в Where, но еще не зафетчены на клиента (и не будут зафетчены после открытия датасета)?


 
{bas}   (2003-11-24 19:23) [4]

Каким образом какие-то строки не будут зафетчены на клиента, если стоит FetchAll := True;


 
Reindeer Moss Eater   (2003-11-24 19:24) [5]

если стоит FetchAll := True;

Ну и что же ты тогда пытаешься сэкономить?
Пьем шампанское, экономим на спичах?


 
{bas}   (2003-11-24 19:33) [6]

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

Ладно поставлю вопрос по другому. Как делает грид прорисовку данных?? К какому событию он цепляется?? Я так и не смог понять по исходникам, больно уж там запутано.


 
Reindeer Moss Eater   (2003-11-24 19:35) [7]

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

Ты ботанику в школе учил?
Зачем в гриде(!) сто записей, если грид с частотой 10 герц(!) обновляется ?


 
Reindeer Moss Eater   (2003-11-24 19:37) [8]

Зачем вообще грид?


 
{bas}   (2003-11-24 19:40) [9]

>>Зачем в гриде(!) сто записей, если грид с частотой 10 герц(!) обновляется ?

Я сказал до 100 - это значит от 0 до 100 записей, обычно там бывает около 10-20 записей - это трейдерская система, поэтому так все быстро меняется и человек может уловить только 2 изменения в сек., а программа должна реагировать на все изменения.


 
Reindeer Moss Eater   (2003-11-24 19:42) [10]

Какая разница?
Трейдеру что важно?
Сам факт изменения, или он бедняга пытается прочитать эти пусть даже 10 записей обновляемые пусть даже раз в секунду?


 
{bas}   (2003-11-24 19:46) [11]

>> Трейдеру что важно?
>> Сам факт изменения, или он бедняга пытается прочитать эти >> пусть даже 10 записей обновляемые пусть даже раз в секунду?

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


 
{bas}   (2003-11-24 19:49) [12]

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


 
Reindeer Moss Eater   (2003-11-24 19:49) [13]

Если ему нужна динамика суммы, то и запрашивай у сервера сумму, а не строки, которые он все равно не успеет рассмотреть и показывай трейдеру сумму.


 
Reindeer Moss Eater   (2003-11-24 19:51) [14]

Либо параллельные запросы на общую сумму и строки для грида


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

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


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

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


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

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

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


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

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

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

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


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

OnPaint


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

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


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

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

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

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


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

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

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


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

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


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

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

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

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

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


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

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


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

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

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

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

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


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

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

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


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


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

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

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


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

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

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


 
Danilka   (2003-11-25 11:20) [30]

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


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

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


 
Danilka   (2003-11-25 11:35) [32]

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


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

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


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

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



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

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

Наверх





Память: 0.53 MB
Время: 0.008 c
3-52077
GIL
2003-11-24 15:01
2003.12.16
много пользователей


14-52410
al_
2003-11-24 09:56
2003.12.16
При установке Delphi 6.0 ошибочка, разъясните...


1-52199
Nata Kirhar
2003-12-02 13:27
2003.12.16
HTML & MS Word


4-52438
rel_
2003-10-21 08:45
2003.12.16
Создание окна


1-52138
oens
2003-12-03 15:34
2003.12.16
Поиск в HTML





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский