Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

В Grid обсчёт двух полей и более.   Найти похожие ветки 

 
Павел   (2004-09-02 10:08) [0]

Хочу в Гриде выполнить обыкновенную операцию по редактированию поля, чтобы в этот момент пересчитывались другие поля
Пишу код
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
var tup1,tup2: integer;
begin
if dbgrid1.SelectedField.FieldName="posl_god" then
  begin
    tup1:=Query2.FieldByName("posl_god").asinteger;
    tup2:=Query2.FieldByName("sled_god").asinteger;
    tup1:=tup1+tup2;
    Query2.FieldByName("posl_god").asinteger:=tup1;
  end

end;

Выдаёт ошибку.
Dataset not in edit or insert mode

В чём тут дело ?


 
Алхимик ©   (2004-09-02 10:19) [1]

В том, что набор данных не находится в режиме редактирования.


 
Rule ©   (2004-09-02 10:30) [2]

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


 
Павел   (2004-09-02 10:33) [3]

хочу в момент редактирования одного поля, чтобы вёлся обсчёт других полей, именно этой строки...
типа
поле1 = поле 2 + поле3
но чтоб именно при вводе данных это происходило т.е. в моменнт обращения к конкретному полю.


 
Rule ©   (2004-09-02 10:40) [4]

тогда тебе надо сделать CalculatedField  и в обработчике событий твоего тейбла или квери OnCalculate  написать такой вот код
Table1.fieldByName("Field1").asInteger:=Table1.fieldByName("Field2").asInteger+Table1.fieldByName("Field3").asInteger;

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


 
Павел   (2004-09-02 10:46) [5]

так мне в том то и дело надо, чтобы всё-таки, хранилось значение в поле БД, после обсчёта


 
Ega23 ©   (2004-09-02 10:47) [6]

Павел   (02.09.04 10:46) [5]
ЗАЧЕМ????? Если у тебя есть 2 поля в базе, то третье ты ВСЕГДА сможешь вычислить!


 
Павел   (2004-09-02 11:24) [7]

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


 
Sergey13 ©   (2004-09-02 11:26) [8]

2[7] Павел   (02.09.04 11:24)
И ты правда пишешь для MS SQL?


 
Алхимик ©   (2004-09-02 11:29) [9]


> [7] Павел   (02.09.04 11:24)
> мне третье поле нужно для того, чтобы потом вести выборку
> по нём в другой задаче.

А кто в другой задаче мешает вычислить это поле?


 
Павел   (2004-09-02 11:31) [10]

да...
пишу для MS SQL
Не пойму только какая проблема вычислить сумму/произведение и т.д. нескольких полей в момент редактирования определённого поля и занесения значения в другое поле. Мне нужно чтобы хранилось там значение.


 
Sergey13 ©   (2004-09-02 11:36) [11]

2[10] Павел   (02.09.04 11:31)
>Не пойму только какая проблема
Проблем нет. Надо.
1.Подумать стОит ли? (все таки)
2.Выбрать правильное событие
3.Правильно написать.

Если с 1 ты упорствуешь, то сделай правильно 2 и 3.
2.БифоПост
3.Едит добавь


 
Rule ©   (2004-09-02 11:44) [12]

Сразу говорю, это неправильно координально, ты не понимаешь сути, зачем хранить избыточную информацию, если третье поле несет в себе смысл суммы первого и второго и существует визически, то еслия я залезу и руками подправлю там значение то все завалится, значение не будет соответствовать истине, бред получается а при построении запроса всегда можно в самом запросе и подсчтитать сумму и разность и произвденеи и среднее значени и все что тебе надо,
не упорствуй я тебе говорю а лучше почитай про принципы организации БД, про самые основы, иначе потом столко подводных камне будет что караул, а ты даже не будешь понимать в чем же ты виноват


 
-SeM-   (2004-09-02 12:02) [13]

А в MSSQL calculated поля есть?
Если есть и очень хочется можно через них.


 
Rule ©   (2004-09-02 12:14) [14]

Интересный факт, тема звучит вот так
В Grid обсчёт двух полей и более
сразу поправка, GRID  служит тольео для визуализации, внем счиать ничего не надо .. считать надо в датасете



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

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.028 c
14-1095242746
Igorek
2004-09-15 14:05
2004.10.03
Ультрапрограммирование - кто таким занимался?


8-1088095062
Sunny Way
2004-06-24 20:37
2004.10.03
Чтение JPEG


4-1093512400
bjohny
2004-08-26 13:26
2004.10.03
Утечка памяти при загрузке DLL


3-1094151683
Damager
2004-09-02 23:01
2004.10.03
Конвертация Paradox в Справочники 1С


14-1095230405
Igorek
2004-09-15 10:40
2004.10.03
Ой, верните назад