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

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

Заполнение DataSet'а в два захода. [D6]


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

slaga ©   (2005-02-02 15:01:00) 

Такая вот проблема:
есть один датасет, в нем есть запрос который выводит две колонки значений, и есть еще одна колонка (3) она при выполнении запроса пустая, потом когда запрос выполнился и заполни Датасет нужно, исходя из определенных вычислений, заполнить 3 колонку, я это делаю все заполняется но есть одна порблема, а именно, когда заполняется 3 колонка то Грид в который я все это вывожу постоянно перепрыгивает в то место(на ту строку) которая в текущий момент вставилась в датаСет, таким образом получается что работать с Гридом пока не выполнится заполнение 3 колонки нельзя - а надо.
подскажите как избежать перемещения активного курсора грида во время заполнение 3 колонки.


slaga   (2005-02-03 11:02:00) [1]

to ЮЮ
А вот это действительно хорошая мысль, спасибо.


АлексейК   (2005-02-03 10:36:00) [2]

Если значения третьего поля не надо сохранять в базу, а запрос представленный двумя полями не нуждается в редактировании, отвежитесь вы вообще от DataSeta. Считали данные, поместили их в контейнер какой вам больше по душе и работайте.

Вычесления это типа опрос 150 удаленно расположеных касс на момент запущености сервера Interbase

Тем более набор данных ничтожен.


ЮЮ   (2005-02-03 10:21:00) [3]

Итак, насколько я понял, список касс можно легко получить простым запросом, а опрос их состояния - процесс длительный (4-5) минут, при этом, хочется бродить по гриду в ходе этого процесса.

Следовательно,
1) опрос должен осуществляться в отдельном потоке
2) результаты сохраняться не в этот датасет, а в другую структуру, например список
3) поле в датасете должно быть Calculated, но "вычисления" должны сводиться к обращению к списку 2) из которого видно, что касса в online, offline или неопрошена


Sergey13   (2005-02-03 09:31:00) [4]

2slaga ©
Все таки ты нифига не читал про калк поля. Откуда такое упорство?

Калк поле - это виртуальное поле (не опирающееся на реальное поле таблицы), которое расчитывается автоматически по мере надобности(например запись стала видимой в гриде, или ты просто обращаешься к записи). Не надо искать эти записи, переводить их в Эдит и Постить. Это все сделается само, без твоего участия. Ты просто должен указать как это поле считатьв обработчике OnCalcFields.


Соловьев   (2005-02-02 20:34:00) [5]


> какая разница ?

хочешь тебе помочь. а ты виляешь, ну и выкручивайся сам, если такой скрытый.


slaga   (2005-02-02 19:30:00) [6]

какая разница ?


Соловьев   (2005-02-02 19:21:00) [7]


> передается как параметр из другой процедуры

из какой?


slaga   (2005-02-02 19:06:00) [8]

передается как параметр из другой процедуры


Соловьев   (2005-02-02 18:55:00) [9]


> DM.odsMonitor.Locate('Kassa', gstrKassa, [loCaseInsensitive]);

откуда берется gstrKassa?


slaga   (2005-02-02 18:38:00) [10]

to zunder
да, но для этого мне надо обойти весь Датасет ?


slaga   (2005-02-02 18:30:00) [11]

to zunder
пробовал, непомагает

to Sergey13

Locate что б найти запись в которой нужно вставить значение 3 столбца

Edit что б редактировать датасет

Post что б сохранить запись в дата сете

и пишу я это все не в OnCalcFields, а просто в одной из своих процедур.


zunder   (2005-02-02 18:30:00) [12]

вместо
DM.odsMonitor.Locate('Kassa', gstrKassa, [loCaseInsensitive]);
DM.odsMonitor.Edit;
DM.odsMonitor.FieldValues['Status'] := 'Online';
DM.odsMonitor.Post;

попробуй что то вроде этого
if DM.odsMonitor.FieldByName('Kassa').AsString = gstrKassa then
 DM.odsMonitor.FieldValues['Status'] := 'Online'


Sergey13   (2005-02-02 18:15:00) [13]

2[32] slaga ©   (02.02.05 18:06)
А где ты писал этот код при калк полях? В OnCalcFields? И правильно дергался. Зачем там Locate? И Edit с Post не нужны.


zunder   (2005-02-02 18:10:00) [14]

в пробовал использовать DisableControls/EnableControls?


slaga   (2005-02-02 18:06:00) [15]

Потому что я попробовал поставить его Calculated, при таком типе, грид всеравно метался, а данные не выводились :(


Sergey13   (2005-02-02 17:58:00) [16]

2[30] slaga ©   (02.02.05 17:56)
>и поле типа калькулейт мне не подходит.
Почему?


slaga   (2005-02-02 17:56:00) [17]

Я 3 поле заполняю вот так:

DM.odsMonitor.Locate('Kassa', gstrKassa, [loCaseInsensitive]);
DM.odsMonitor.Edit;
DM.odsMonitor.FieldValues['Status'] := 'Online';
DM.odsMonitor.Post;


и поле типа калькулейт мне не подходит.

А кассы я опрашиваю методом подключения к базам на них.


zunder   (2005-02-02 17:49:00) [18]

slaga ©   (02.02.05 17:21) [22]
в дизайнере проекта открой Fields Editor для своего датасета.
в нем создай 3-е поле New Field...
откроется окно в котором
в разделе Field Properties укажи имя и тип поля
в разделе Field Type выбери Calculated
нажми OK
затем в обработчике события OnCalcFields для этого же датасета опиши как вычисляется 3-е поле


Sergey13   (2005-02-02 17:48:00) [19]

2[25] slaga ©   (02.02.05 17:38)
>Вычесления это типа опрос 150 удаленно расположеных касс на момент запущености сервера Interbase
Это как? Хотя бы на пальцах, раз код ты не любишь?


slaga   (2005-02-02 17:43:00) [20]

небудет, если я сделаю DataSet.DisableControls , я несмогу работать с Гридом пока не заполнится 3 столбец, тоесть пока я не сделаю DataSet.EnableControls


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

Наверх

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