![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Заполнение DataSet'а в два захода. [D6]
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