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

Вниз

Работа с вычисляемыми полями   Найти похожие ветки 

 
Shtock   (2003-03-27 08:14) [0]

Доброе утро, мастера! Есть 2 таблицы, связанные отношением master-detail. В таблице detail есть некое поле work_wal. В таблице master есть вычисляемое поле work_val, равное, соответственно, сумме значений поля work_val соответствующих записей таблицы detail. Каким образом мне осуществить пересчет суммы (поля work_val в таблице master) при измененни записи в таблице detail.Вызов события OnCalculateFields приводит к exception: таблица master не находится в режиме Edit или Insert.
Заранее спасибо!


 
Sava   (2003-03-27 08:35) [1]

А тригер не пробовал написать?
На изменение, на вставку и на удаление?


 
stone   (2003-03-27 09:25) [2]


> таблица master не находится в режиме Edit или Insert


Ну так установи режим Edit


 
Johnmen   (2003-03-27 09:35) [3]

Возникновение данного exception говорит о том, что указанное поле НЕ является вычисляемым !


 
Vassiliy   (2003-04-01 09:31) [4]

Ты бы код свой показал, легче было бы разобраться :)


 
Fiend   (2003-04-01 09:41) [5]

так надо сделать Edit, потом поправить значения выч полей а затем сделать Post, и всё получится


 
Mike Kouzmine   (2003-04-01 09:43) [6]

Естественно. см Johnmen.
Чтобы помочь, необходимо знать какие компоненты используешь для доступа. Если TTable, то берешь еще один экземпляр дет таблицы, вяжешь так же как и первый, на датачендж первой делаешь рефреш второй и в цикле пересчитываешь. Для TQuery та же бодяга


 
Mike Kouzmine   (2003-04-01 09:45) [7]

Fiend © При вычислении кальк полей НД находиться не в дседит, а в дсКальфильдз, насколько помню, просто так его не выставить. Хотя я могу ошибаться.


 
Fiend   (2003-04-01 09:59) [8]

То Mike Kouzminе:
согласен, это я не подумав ответил. Глянул тексты и в натуре никакого едит поста нету. Наверно он пытается действительно не вычисляемые поля править.


 
Shtock   (2003-04-01 10:12) [9]

Для Vassiliy:

void __fastcall TVTKDataModule::CompADOTableCalcFields(TDataSet *DataSet)
{
AnsiString Query;
Query="SELECT SUM(design.work_val) AS work_val FROM design,vedomost,complect WHERE((design.id_comp=complect.id)";
Query+="AND(complect.id_ved=vedomost.id)AND(vedomost.id="+VedADOQuery->FieldByName("id")->AsString+")AND(";
Query+="complect.id="+CompADOTable->FieldByName("id")->AsString+"))" ;
OpenQuery(VTKDataModule->WorkADOQuery,Query);
CompADOTable->FieldByName("work_val")->AsFloat=WorkADOQuery->FieldByName("work_val")->AsFloat;
}


void __fastcall TVTKDataModule::DesignADOTablework_valChange(TField *Sender)
{
CompADOTableCalcFields(CompADOTable);
}


 
Fiend   (2003-04-01 10:21) [10]

А зачем вы насильно вызываете обработчик вычисления полей?
Выходит у вас таки нету вычисляемых полей в таблице и потому он сам не вызывается!
А раз таких полей нету, значит надо Едит-Поменять-Пост - это внутри обработчика. А вообще конечно неплохо бы разобраться зачем нужны вычисляемые поля!

И в принципе то шо вы в обработчике делаете неплохо бы перенести в OnBeforePost и там преспокойненько сделать задуманное безо всяких Едит-Пост


 
Mike Kouzmine   (2003-04-01 10:21) [11]

Еще раз для Васи. Когда начинает выполняться void __fastcall TVTKDataModule::CompADOTableCalcFields(TDataSet *DataSet), то набор данных переводится в режим расчета кальк полей. Это спец режим, в котором возможно изменение только fkCalcField (или как оно там), ты же пытаешься править fkData.


 
stone   (2003-04-01 10:29) [12]

Не очень занком с синтаксисом Си
Что-то типа этого

> void __fastcall TVTKDataModule::DesignADOTablework_valChange(TField
> *Sender)
> {

CompADOTable.Edit;
> CompADOTableCalcFields(CompADOTable);
> }



 
Fiend   (2003-04-01 10:58) [13]

То stone:
тока не точка а ->Edit()
Это если просто поправить синтаксис который вы привели


 
Vassiliy   (2003-04-01 11:03) [14]

Наиболее вероятная причина ошибки - поле "work_val" не вычисляемое. Проверь еще раз...






 
Shtock   (2003-04-01 11:06) [15]

Проверил, вычисляемое. Но ходят слухи, что Builder 5.0 порядочно глючит c ADO. Сам уже не раз убеждался. Недавно очередной глюк отловил.


 
Vassiliy   (2003-04-01 11:08) [16]

ADO тут вообще говоря не причем. Работа с вычисляемыми полями на клиенте идет независимо от механизма доступа к БД.


 
Anatoly Podgoretsky   (2003-04-01 11:13) [17]

Shtock © (01.04.03 11:06)
Есть неподтвержденные слухи, что это как правило программисты.
Вот ты например страдаешь излишней конкретностью :-)



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

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

Наверх




Память: 0.47 MB
Время: 0.007 c
3-54458
Алекс
2003-03-28 15:07
2003.04.17
Синхнонизация данных клиента и сервера


4-54946
Long
2003-02-17 18:15
2003.04.17
Как с помощью WinAPI создать окно с кнопкой


3-54445
Officeman
2003-03-26 19:49
2003.04.17
Real type=) десятые и сотые


3-54422
MaxV
2003-04-01 13:59
2003.04.17
Как открыть паролированную таблицу Paradox?


14-54826
vanek8
2003-03-27 09:11
2003.04.17
QReport





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