Форум: "Базы";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];
ВнизTQuery.OnCalcFields ... Найти похожие ветки
← →
lightix (2003-05-08 10:23) [0]Если в сабжевом событии написать что-либо кроме вычисления самих столбцов, то оно зацикливается почему-то :(
как это обойти?
например если мне нужно для каждой записи какое-то действие выполнить. В частности есть поле сформированное как cast(0 as integer) as POLE1.
и его значение должно вычисляться...
← →
Mike Kouzmine (2003-05-08 10:29) [1]OnCalcFields - событие для расчета значений полей имеющих свойство FieldKind = fkCalcField, все другое приводит к ошибке или непредсказуемым результатам
← →
lightix (2003-05-08 10:35) [2]А есть альтернатива этому событию?
т.е. аналог триггера POST_RECORD в Oracle ?
Мне нужно вычислить значения полей, но у них FieldKind = fkData.
Каким образом это можно сделать?
← →
Mike Kouzmine (2003-05-08 10:39) [3]Создаешь поля в дизайне или рантайме, но не в SQL запросе.
← →
WarLord (2003-05-08 10:40) [4]
> lightix (08.05.03 10:35)
> А есть альтернатива этому событию?
> т.е. аналог триггера POST_RECORD в Oracle ?
>
> Мне нужно вычислить значения полей, но у них FieldKind =
> fkData.
> Каким образом это можно сделать?
когда тебе надо посчитать поля?
← →
lightix (2003-05-08 10:52) [5]2WarLord © (08.05.03 10:40)
Да точно так же как и обычные вычисляемые поля...
Если бы ненужна была корректировка этих полей, то сделал бы обычные вычисляемые ...
Можно вообще сделать нормальные вычисляемые поля и при их изменении значения закидывать в те "виртуальные" поля, но почему то у вычисляемых полей ни OnChange, ни OnSetText не срабатывает :(
← →
lightix (2003-05-08 11:00) [6]2Mike Kouzmine © (08.05.03 10:39)
Что значит в дизайне или рантайме? имеешь ввиду вычисляемые поля?
← →
Mike Kouzmine (2003-05-08 11:08) [7]Да.
А тебе нужно вычислять значение на основании табличных данных или учавствуют в этом сторонние силы?
← →
Sergey13 (2003-05-08 11:12) [8]2lightix (08.05.03 10:23)
Ты хочешь вычислять настоящие поля на основе фиктивного? Я правильно понял, на основании вчерашней ветки? Или я путаю? Если так, то ты предстявляешь частоту возникновения этого события (TQuery.OnCalcFields)? Так, из-за юзерского "нежелания" можно не только прогу "зациклить" но и сервак. 8-(
А ведь предлагал я тебе таблицы в памяти... 8-)
← →
lightix (2003-05-08 11:15) [9]2Mike Kouzmine © (08.05.03 11:08)
Во-первых значения вычисляются "со стороны", но на основании табличных данных :)
Во-вторых - вычисляемое поле мне не подходит - его нельзя редактировать...
По коду из таблицы нужно подтягивать в это поле наименование из справочника по некому условию. и его можно редактировать. Если ввели наименование которго нет в справочнике, то нужно сформировать новый код и запихнуть в справочник.
На Oracle Forms у меня такое дело прекрасно функционирует.
← →
lightix (2003-05-08 11:20) [10]2Sergey13 © (08.05.03 11:12)
Ага, ты правильно понял :)
Только вчера задача была попроще - я там выбрал не cast(...) а из той же таблицы NOTD||NGRP и на него повесил обработчик... и все...
Теперь вот пришлось в другом месте эту тенологию применять :(
Для решения этой задачи достаточно заполнить эти поля значениями, а дальше все само собой....
← →
Sergey13 (2003-05-08 11:30) [11]2lightix (08.05.03 11:20)
>Теперь вот пришлось в другом месте эту тенологию применять
Доведет тебя такая "технология" до... 8-(
Ты бы хоть текст процедуры обработки привел что-ли.
← →
lightix (2003-05-08 11:43) [12]Вот, пожалуйста это код для вычисления значение одного поля NZAV(которое выбрано в запросе как
"select t.*,t.rowid,
cast("" as varchar2(100)) as NZAV from kt_obraz t
where tabn=:TABN order by datedipl"
Код абсолютно рабочий, даже если его повесить на q_obraz.AterScroll то срабатывает, но только для первой записи ...
Как заставить его работать для всех записей при открытии - ума не приложу ...
Суть нижеследующего кода - выбрать из справочника наименование учебного заведения, которое было у него (заведения) на момент выдачи диплома.
if (q_obraz->Fields->FieldByName("KZAV")->AsString!="")
{
qt->Close();
qt->SQL->Clear();
qt->SQL->Add("select nzav from s_zaved where lang="RU"");
if (q_obraz->Fields->FieldByName("datedipl")->AsString=="")
qt->SQL->Add("and nvl(daten,sysdate)<=sysdate and nvl(datek,sysdate)>=sysdate");
else
qt->SQL->Add("and nvl(daten,sysdate)<=to_date(""+q_obraz->Fields->FieldByName("datedipl")->AsString+
"","DD.MM.YYYY") and nvl(datek,sysdate)>=to_date(""+q_obraz->Fields->FieldByName("datedipl")->AsString+"","DD.MM.YYYY")");
qt->SQL->Add("and kzav="+q_obraz->Fields->FieldByName("KZAV")->AsString);
qt->Open();
q_obraz->Fields->FieldByName("NZAV")->AsString=qt->Fields->FieldByName("NZAV")->AsString;
}
← →
Sergey13 (2003-05-08 11:55) [13]2lightix (08.05.03 11:43)
Одно могу сказать - круто!!! 8-)
Тебе ответил Mike Kouzmine © (08.05.03 10:29), но, ИМХО, даже если бы работало - сама идея порочна. А ты еще и редактировать чего то хочешь?
Тут надо структуру смотреть и править в консерватории. ИМХО.
← →
lightix (2003-05-08 13:09) [14]Что ж поделаешь, юзера привыкли в старом ПО так работать, уже не отучишь ....
← →
Mike Kouzmine (2003-05-08 14:50) [15]А lookup поля не спасут отца русской демократии?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c