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

Вниз

Заполнение DataSet а в два захода.   Найти похожие ветки 

 
slaga ©   (2005-02-02 15:01) [0]

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


 
Соловьев ©   (2005-02-02 15:03) [1]

читать TDataSet.OnCalcField, TDataSet.DisableControls.


 
slaga ©   (2005-02-02 15:08) [2]

TDataSet.DisableControls неподходит, ибо он блокирует и выведение информации "в живую", тоесть если я сделаю DataSet.DisableControls то я увижу информацию 3 столбика только когда он весь сформируется, а это для меня неочень удобно, хотя как крайний вариант подойдет.


 
Sergey13 ©   (2005-02-02 15:09) [3]

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


 
Соловьев ©   (2005-02-02 15:12) [4]


> подскажите как избежать перемещения активного курсора грида
> во время заполнение 3 колонки.


> то я увижу информацию 3 столбика только когда он весь сформируется

не находишь противоречия?


 
slaga ©   (2005-02-02 15:12) [5]

нельзя, физически информация может быть получена после выполнения запроса в датасете


 
Sergey13 ©   (2005-02-02 15:16) [6]

2 [5] slaga ©   (02.02.05 15:12)
Ну тогда смотри [1] Соловьев ©   (02.02.05 15:03) первую часть.


 
slaga ©   (2005-02-02 15:18) [7]

ну как :))
мне надо (в идеале) что б информация 3 столбика выводилась, но немешала свободному просмотру/чтению Грида


 
Sergey13 ©   (2005-02-02 15:41) [8]

2[6] Sergey13 ©   (02.02.05 15:16)
Тебе еще раз сказать смотреть в [1]? Если алгоритм вычисления не очень медленный, то нормально работает.


 
slaga ©   (2005-02-02 15:55) [9]

А что именно туда писать ?


 
Sergey13 ©   (2005-02-02 15:59) [10]

Куда писать? Про калк поля прочитал?


 
slaga ©   (2005-02-02 16:15) [11]

Почитал, и чем он мне поможет ?


 
slaga ©   (2005-02-02 16:19) [12]

У меня не калькулятивное и не лукапное поле а простое обычное Data поле.


 
Sergey13 ©   (2005-02-02 16:20) [13]

2[11] slaga ©   (02.02.05 16:15)
Блин. От тебя только упоминание про 3 колонки пока было. Чего ты хочешь и на чем ты работаешь мы не знаем. Чего ты ждешь от такого общения?


 
slaga ©   (2005-02-02 16:25) [14]

А что непонятно в моем вопросе ?!


 
Sergey13 ©   (2005-02-02 16:29) [15]

2 [14] slaga ©   (02.02.05 16:25)
Для тебя может и понятно. Мы то твоего проекта не видели.

2[12] slaga ©   (02.02.05 16:19)
>У меня не калькулятивное и не лукапное поле а простое обычное Data поле.
И ты его каждый раз при открытии пересчитываешь что ли?


 
slaga ©   (2005-02-02 16:34) [16]

нет, у меня есть 1 датасет, в нем есть 1 запрос который возвращает 2 поля.

еще я добавил 1 поле в этот датасет, просто типа стринг

когда выполняется запрос, заполняются 2 поля датасета

после этого я заполняю 3 поле руками, инсерчю в него значения, и вот когда я это делаю, у меня на гриде курсор перемещается к той строке в которую я заинсертил значение 3 столбца


 
Sergey13 ©   (2005-02-02 16:38) [17]

2[16] slaga ©   (02.02.05 16:34)
>еще я добавил 1 поле в этот датасет, просто типа стринг
Посто? И что это за поле? Оно соответствует физическому полю таблицы?

>после этого я заполняю 3 поле руками, инсерчю в него значения,
Код можно увидеть?

>и вот когда я это делаю, у меня на гриде курсор перемещается к той строке в которую я заинсертил значение 3 столбца
Естественно, грид становится на активную запись.

ЗЫ: Ты все таки не читал про калк поля по моему.


 
msguns ©   (2005-02-02 16:44) [18]

Заинсертил столбец ? Как это ? Может "заупдател" ? Хотя и то, и другое коряво до невозможности


 
slaga ©   (2005-02-02 17:01) [19]

ну блин, есть 3 столбец, он пустой после выполнения запроса( который заполняет 2 остальных) я его этот 3 столбец заполняю руками


 
Соловьев ©   (2005-02-02 17:04) [20]


> еще я добавил 1 поле в этот датасет, просто типа стринг

вот когда добаил, сделай ему тип не Дата, а калк


 
Johnmen ©   (2005-02-02 17:11) [21]

>я его этот 3 столбец заполняю руками

...и ? Что дальше надо ?


 
slaga ©   (2005-02-02 17:21) [22]

Да это поля мне нужно только для того что б "визуально" показать некую информацию которую я беру не из базы, просто заполнение 3 столбца занимает 4-5 минут, и все это время смотреть на метающийся столбец плохо.


 
Соловьев ©   (2005-02-02 17:27) [23]


> просто заполнение 3 столбца занимает 4-5 минут, и все это
> время смотреть на метающийся столбец плохо.

какие там вычисления? можно глянуть?
приведи код


 
Sergey13 ©   (2005-02-02 17:28) [24]

2[22] slaga ©   (02.02.05 17:21)
Опять повторю.
Ты все таки не читал про калк поля по моему.


 
slaga ©   (2005-02-02 17:38) [25]

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


 
OnThink ©   (2005-02-02 17:39) [26]

DataSet.DisableControls - и будет тебе щастье


 
slaga ©   (2005-02-02 17:43) [27]

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


 
Sergey13 ©   (2005-02-02 17:48) [28]

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


 
zunder ©   (2005-02-02 17:49) [29]

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


 
slaga ©   (2005-02-02 17:56) [30]

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

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


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

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


 
Sergey13 ©   (2005-02-02 17:58) [31]

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


 
slaga ©   (2005-02-02 18:06) [32]

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


 
zunder ©   (2005-02-02 18:10) [33]

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


 
Sergey13 ©   (2005-02-02 18:15) [34]

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


 
zunder ©   (2005-02-02 18:30) [35]

вместо
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"


 
slaga ©   (2005-02-02 18:30) [36]

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

to Sergey13

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

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

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

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


 
slaga ©   (2005-02-02 18:38) [37]

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


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


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

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


 
slaga ©   (2005-02-02 19:06) [39]

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


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


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

из какой?


 
slaga ©   (2005-02-02 19:30) [41]

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


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


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

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


 
Sergey13 ©   (2005-02-03 09:31) [43]

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

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


 
ЮЮ ©   (2005-02-03 10:21) [44]

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

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


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

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

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

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


 
slaga ©   (2005-02-03 11:02) [46]

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



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

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

Наверх





Память: 0.56 MB
Время: 0.037 c
1-1108636515
snake_r
2005-02-17 13:35
2005.03.06
размер коментария в Excel


11-1092320535
Дмитрий Галин
2004-08-12 18:22
2005.03.06
Сообщение WM_LBUTTONDOWN


6-1103921778
XfroSt
2004-12-24 23:56
2005.03.06
как определить имя подключившегося пользователя (соединения)


1-1109140441
Cash
2005-02-23 09:34
2005.03.06
Связь с IE


4-1106125280
Dionnis
2005-01-19 12:01
2005.03.06
Определение вида кодировки





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