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

Вниз

Как изменять динамические поля созданные в TQuery ?   Найти похожие ветки 

 
Alpine   (2005-09-18 13:17) [0]

Значит создал я два динамических поля (KOLICHESTVO и SUMMA) в Query1 ... Задал свойству RequestLive значение True ... Теперь мне надо в гриде менять значение поля KOLICHESTVO и после изменения SUMMA=KOLICHESTVO*PRICE(это поле не динамическое).... Так вот в гриде не получается изменять значение этого поля ... В гриде разрешенно EDITING. И ReadOnly=False.  В чём может быть проблемма .. Помогите ...


 
Anatoly Podgoretsky ©   (2005-09-18 13:21) [1]

Что такое динамические поля?


 
Alpine   (2005-09-18 13:45) [2]

Это поля реально не существующие в таблице. Они добавляются в Query или Table в разделе FieldsEditor.


 
Виталий Панасенко   (2005-09-19 11:38) [3]

Ты имеешь ввиду, вычисляемые ? Наверное, с наскоку, никак.. в OnCalcFields только


 
Anatoly Podgoretsky ©   (2005-09-19 11:55) [4]

Alpine   (18.09.05 13:45) [2]
Теперь подробно об этих полях, что какое и как, и это вроде бы или расчетные, или подстановочные, или списочные поля, но только не динамические.


 
Plague ©   (2005-09-19 12:35) [5]

"Руками" ты вычисляемые поля не заполнишь, они не для этого рождены. В OnCalcFields напиши процедурку, которая будет "SUMMA=KOLICHESTVO*PRICE" и все... если я праввильно понял subject ;-)


 
msguns ©   (2005-09-19 12:54) [6]

Идея ясна. В базе есть 2 поля: к-во и цена.
Клиенту при их визуализации надо еще посчитать сумму. При этом если редактируется одно из "рабочих" полей, то автоматом должна меняться и сумма.
Решение получать это поле на "сервере" (в запросе) неудачное, имхо. Для отображения (и только, ведь это число в БД записано не будет) достаточно "кинуть" в запрос любое "левое" поле, в OnGetText которого прописать

With Field.DataSet do
  Text := IntToStr(FieldByName("Quont").AsInteger*FieldByName("Price").AsInteger)


 
Alpine   (2005-09-19 13:49) [7]

Anatoly Podgoretsky
Это вычисляемые поля ... В таблице есть ещё много полей. Мне нужно в поле количество вводить даные, после чего сумма стане = количество * цену. Значит в CalcFields никак нельзя ввести данные да ?


 
Megabyte ©   (2005-09-19 14:00) [8]

Вычисляемые поля на то и вычисляемые. В чем проблема сделать обработчик события?


 
Alpine   (2005-09-19 14:11) [9]

Проблемма в том что мне надо вводить значение в вычисляемое поле !


 
Sergey13 ©   (2005-09-19 14:15) [10]

2 [9] Alpine   (19.09.05 14:11)
ИМХО, ты сам не знаешь, что тебе надо. Описал бы задачу которую решаешь. Я почему то почти уверен, что ты заблудился в трех соснах.


 
ANB ©   (2005-09-19 14:18) [11]


> Alpine   (19.09.05 14:11) [9]
- если опишешь обработчик - оно само введется. Только убери его из запроса и сделай нормальное вычисляемое поле.


 
msguns ©   (2005-09-19 14:40) [12]

>Sergey13 ©   (19.09.05 14:15) [10]
>ИМХО, ты сам не знаешь, что тебе надо.

Попробую включит телепатор ;)
Похоже у него такая трабла:

Есть три сущности: a,b и c, причем c = a * b
Однако позволяется менять все 3 сущности, при этом если одна из них меняется, то должны быть пересчитаны остальные 2:

a = c/b  или b = c/a

Если так, то редактирование в гриде возможно (при том же компоненте доступа) только если поле c - регулярное табличное поле.

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

Нормальное решение -
1. отказаться от редактирования в гриде, перейдя на модальную форму редактирования записи (имхо-оптимально).
2. использовать непривязанный в "живой" таблице запрос (стрингрид, CDS, НД в памяти (Rxlib) и т.д.)


 
msguns ©   (2005-09-19 14:47) [13]

>ANB ©   (19.09.05 14:18) [11]
>- если опишешь обработчик - оно само введется. Только убери его из запроса и сделай нормальное вычисляемое поле.

Не то.

Чтобы калк-поле запроса пересчиталось, надо запостить запись, т.е. как минимум "уйти" с нее. А он хочет чтоб узер поправил цену и переведя курсор в другую ячейку этой же записи, сразу получил новую сумму.
Если не пересчитывать ее вообще по любому изменению цены (OnKeyXXX грида), что, имхо, вообще уродство.


 
Sergey13 ©   (2005-09-19 14:48) [14]

2[12] msguns ©   (19.09.05 14:40)
А мне мой телепатор подсказывает, что он вводит нечто вроде накладной. Но непонятно, при этом, почему у него количество вычисляемое. Оно просто должно вводиться.
Посмотрим чей телепатор круче. 8-)


 
msguns ©   (2005-09-19 15:09) [15]

>Sergey13 ©   (19.09.05 14:48) [14]
>Посмотрим чей телепатор круче.

На пиво ?


 
Sergey13 ©   (2005-09-19 15:13) [16]

2[15] msguns ©   (19.09.05 15:09)
Легко. 8-)


 
ANB ©   (2005-09-19 15:21) [17]


> что он вводит нечто вроде накладной
- тогда сумма должна считаться, а цена и количество - ручками.


 
msguns ©   (2005-09-19 15:25) [18]

>ANB ©   (19.09.05 15:21) [17]
>- тогда сумма должна считаться, а цена и количество - ручками.

Мусью, вам не попадались накладные, у которых [цена]*[кол-во] ни фига не равны [сумма] ?

;)


 
ANB ©   (2005-09-19 16:36) [19]


> msguns ©   (19.09.05 15:25) [18]
- это как это ? Попадались, где не было цены, а была сумма и количество . . .


 
msguns ©   (2005-09-19 16:43) [20]

>ANB ©   (19.09.05 16:36) [19]
> это как это ?

А так это:

Конфеты "Барбарис" Цена за 1кг 6.68, К-во  8,108  Сумма 54,20
И куча подобных перлов.
Особенно когда а цене скидка, а сумма округляется до 2 знаков.

Самое интересное, что итоговая сумма=сумме всех "сумм".


 
Anatoly Podgoretsky ©   (2005-09-19 16:59) [21]

Sergey13 ©   (19.09.05 14:48) [14]
Очень просто - продайте мне конфет на 30 рублей, по цене 50.95


 
alpine   (2005-09-19 18:42) [22]

Sergey13
Мне нужно, чтоб в гриде я мог вводить текст в поле КОЛИЧЕСТВО !! Для этого у Query свойству RequestLive я поставил значение true.


 
ANB ©   (2005-09-19 18:52) [23]

А я был прав !!! Таки суму корректировать руками не надо !

> alpine   (19.09.05 18:42) [22]
- смотри ветку внимательно, ответы уже есть.


 
Андрей Жук ©   (2005-09-19 19:23) [24]

n other datasets, your application must compute the value of calculated fields every time the record changes or the user edits any fields in the current record. It does this in an OnCalcFields event handler.
While you can still do this, client datasets let you minimize the number of times calculated fields must be recomputed by saving calculated values in the client dataset’s data. When calculated values are saved with the client dataset, they must still be recomputed when the user edits the current record, but your application need not recompute values every time the current record changes. To save calculated values in the client dataset’s data, use internally calculated fields instead of calculated fields.

Internally calculated fields, just like calculated fields, are calculated in an OnCalcFields event handler. However, you can optimize your event handler by checking the State property of your client dataset. When State is dsInternalCalc, you must recompute internally calculated fields. When State is dsCalcFields, you need only recompute regular calculated fields.
To use internally calculated fields, you must define the fields as internally calculated before you create the client dataset. Depending on whether you use persistent fields or field definitions, you do this in one of the following ways:

If you use persistent fields, define fields as internally calculated by selecting InternalCalc in the Fields editor.
If you use field definitions, set the InternalCalcField property of the relevant field definition to True.

Note: Other types of datasets use internally calculated fields. However, with other datasets, you do not calculate these values in an OnCalcFields event handler. Instead, they are computed automatically by the BDE or remote database server.


 
Sergey13 ©   (2005-09-20 09:45) [25]

2[22] alpine   (19.09.05 18:42)
>Мне нужно, чтоб в гриде я мог вводить текст в поле КОЛИЧЕСТВО !! Для этого у Query свойству RequestLive я поставил значение true.
Ну и вводи. Я против что ли. Но потом это количество надо сохранить наверное? Или просто посчитать надо? Тогда нафиг грид нужен?
Я (телепатически 8-) понимаю так - есть сумма в которую надо вложиться. Есть список товаров с ценами. Надо вводить количества с пересчетом стоимостей (по строке и итого) заказа. Вычисляемым тут будет только поле стоимости. Поле количество должно быть в таблице. Оно может быть =0 или <>0. В зависимости от этого сохраняем его или нет в накладной (или что там у тебя - напиши задачу то которую решаешь наконец - телепаторы перегреваются 8-)


 
msguns ©   (2005-09-20 10:29) [26]

>ANB ©   (19.09.05 18:52) [23]
>А я был прав !!! Таки суму корректировать руками не надо !

Похоже, но я еще не уверен на 100%.

Я сдаю свой телепатор в ремонт. Возись с этим партизаном сам ;)


 
alpine   (2005-09-20 11:57) [27]

Sergey13
НЕ ВВОДИТСЯ !! И телепатически ты ошибся ... Сумму вообще можете забыть ! Мне единственное нужно, чтоб в гриде я смог изменять записи вычисляемого поля КОЛИЧЕСТВО ! А обработчики я и сам могу написать ...


 
ANB ©   (2005-09-20 12:00) [28]


> чтоб в гриде я смог изменять записи вычисляемого поля КОЛИЧЕСТВО
- а зачем ты количество вычисляшь ? Его же в базу положить надо . . .


 
Sergey13 ©   (2005-09-20 12:05) [29]

2[27] alpine   (20.09.05 11:57)
> И телепатически ты ошибся ...
Ну дык опубликуй правильный ответ то, партизан ты наш доморощеный. 8-)

>Мне единственное нужно, чтоб в гриде я смог изменять записи вычисляемого поля КОЛИЧЕСТВО
Ексель возьми и меняй чего хочешь. Хоть количество хоть качество. 8-)


 
Anatoly Podgoretsky ©   (2005-09-20 12:24) [30]

Что такое "записи вычисляемого поля"


 
Top ©   (2005-09-20 15:57) [31]

вообще орех какой-то :)


 
Fedia ©   (2005-09-20 23:40) [32]

>alpine   (20.09.05 11:57) [27]
>Мне единственное нужно, чтоб в гриде я смог изменять записи >вычисляемого поля КОЛИЧЕСТВО ! А обработчики я и сам могу написать ...

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

>и после изменения SUMMA=KOLICHESTVO*PRICE(это поле не динамическое)
>Сумму вообще можете забыть !
Судя по твоему первому постингу вычисляемым должно быть поле SUMMA (как мы можем про нее забыть :)


 
msguns ©   (2005-09-21 10:45) [33]

Короче, нужны тиски


 
ANB ©   (2005-09-21 11:10) [34]


> msguns ©   (21.09.05 10:45) [33]
- лучше полевой телефон


 
Sergey13 ©   (2005-09-21 11:36) [35]

Мое предложение - утюг или паяльник. 8-)



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

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

Наверх





Память: 0.53 MB
Время: 0.04 c
14-1128867356
alexsis
2005-10-09 18:15
2005.10.30
Подскажите


2-1128514527
SergP.
2005-10-05 16:15
2005.10.30
StrToDateTime, формат даты


14-1128946953
Антоний
2005-10-10 16:22
2005.10.30
Вот такое письмо


1-1128600470
Андрей Жук
2005-10-06 16:07
2005.10.30
RichEdit ver 4.1


3-1127219035
Rule
2005-09-20 16:23
2005.10.30
Длина строки в Firebird 1.5





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