Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-95107
OverSet
2003-05-11 01:57
2003.05.29
Программистки


14-95110
nikkie
2003-05-11 01:46
2003.05.29
последний спектакль Норд-Оста


8-94974
Kirp
2003-02-14 11:35
2003.05.29
Зуминг изображения


1-94952
acsoft
2003-05-18 09:45
2003.05.29
Как создать скриншот всего экрана, не только окна самой программы


1-94810
OlegM
2003-05-19 11:48
2003.05.29
Как удалить из StringList последние два символа





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