Главная страница
    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.48 MB
Время: 0.008 c
3-54457
korvin
2003-03-29 07:53
2003.04.17
Програмно раскрыть список DBLookup`а и наоборот запрет скролинга


1-54640
Vick
2003-03-31 16:06
2003.04.17
Округление


3-54474
nv-vetal
2003-03-29 20:13
2003.04.17
ADO. MS Access. Удаление записи - получение ошибки.


1-54569
spark81
2003-04-06 12:19
2003.04.17
курсор


3-54527
DAS
2003-03-31 11:57
2003.04.17
Импорт в Access из Visual FoxPro через ADO





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