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

Вниз

Как получить значение вычислимого поля?   Найти похожие ветки 

 
serg128   (2004-06-17 12:08) [0]

Как получить значение вычислимого поля, ну типа:                   x := ds.FieldByName("calcfld").AsString;
Если я так делаю, то возвращается пустое значение (хотя в датасете значение есть).


 
Sandman25 ©   (2004-06-17 12:13) [1]

Событие OnCalcField обрабатывается?


 
Соловьев ©   (2004-06-17 12:13) [2]


> хотя в датасете значение есть

в гриде смотришь?
а поле какого типа?


 
serg128   (2004-06-17 12:18) [3]

Поле TStringField, смотрю в гриде.


 
Соловьев ©   (2004-06-17 12:20) [4]


> Если я так делаю, то возвращается пустое значение

а тут как проверяешь?


 
Sandman25 ©   (2004-06-17 12:20) [5]

А строчка x := ... где находится? В каком обработчике?


 
serg128   (2004-06-17 12:21) [6]

> Событие OnCalcField обрабатывается?

Там нету такого события :((


 
Соловьев ©   (2004-06-17 12:22) [7]


> А строчка x := ... где находится? В каком обработчике?

телепат моде - on :)
OnCalcField :)


 
Соловьев ©   (2004-06-17 12:23) [8]


> Там нету такого события :((

там это где? вообще-то оно у датасета. Это не твоя прога?


 
Sandman25 ©   (2004-06-17 12:23) [9]

[6] serg128   (17.06.04 12:21)

OnCalcFields. Вы можете объяснить, что где у Вас происходит?


 
serg128   (2004-06-17 12:23) [10]

А строчка x := ... где находится? В каком обработчике?

Находится в OnButton1Click
а проверяю: ShowMessage(ds.FieldByName("calcfld").AsString);


 
Sandman25 ©   (2004-06-17 12:27) [11]

Если Вы не обрабатываете OnCalcFields, то ds.FieldByName("calcfld").AsString действительно будет возвращать пустую строку.


 
Anatoly Podgoretsky ©   (2004-06-17 12:27) [12]

Sandman25 ©   (17.06.04 12:23) [9]
Еще не вечер!


 
Соловьев ©   (2004-06-17 12:28) [13]


> Там нету такого события :((

так ты его в запросе может вычисляешь?


 
Domkrat ©   (2004-06-17 12:31) [14]

procedure Dm.MyDatasetCalcFields(DataSet: TDataSet);
begin
 with DataSet do
 begin
   FieldByName("calcfld").AsString:=
      FieldByName("FIELD1").AsString+
      FieldByName("FIELD2").AsString;
 end;
end;
К примеру


 
serg128   (2004-06-17 12:33) [15]

Динамически создаю поле, типа "Вычислимое" и подсовываю его в TClientDataSet:
 TStringField *fl;
 fl = new TStringField(cds);
 fl->FieldKind = fkCalculated;
 fl->Name      = name;
 fl->FieldName = name;
 fl->Size      = 100;
 fl->DataSet   = cds;
 fl->Tag       = code;
 fl->OnGetText = CalcFld;

Теперь подсовываю обработчик события

void __fastcall TForm1::CalcFld(TField *Sender, AnsiString &Text, bool DisplayText)
{
 cdsCorAcc->Filter = "(OP_ID="+ cdsCor->FieldByName("OP_ID")->AsString +")AND(OP_SUBID="+ cdsCor->FieldByName("OP_SUBID")->AsString +")";
 cdsCorAcc->Filtered = true;
 float ac1 = 0;
 float ac2 = 0;
 if(cdsCorAcc->Locate("CODE", Sender->Tag, TLocateOptions()))
 {
   ac1 = cdsCorAcc->FieldByName("SUM")->AsFloat;
   cdsCorAcc->Locate("CODE", IdAcc, TLocateOptions());
   ac2 = cdsCorAcc->FieldByName("SUM")->AsFloat;
   Text = FloatToStr((ac1 > ac2) ?  ac1 : ac2);
 }
 else Text = "0";
}


 
Sandman25 ©   (2004-06-17 13:57) [16]

[15] serg128   (17.06.04 12:33)

Интересный приемчик Вы использовали...
Все же лучше написать
MyDataSet.OnCalcFields := MyDataSetCalcFields;
Почитайте про OnCalcFields в хелпе


 
serg128   (2004-06-17 15:43) [17]

Спасибо, я уже разобрался....



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

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

Наверх




Память: 0.5 MB
Время: 0.043 c
8-1082609276
hellfire
2004-04-22 08:47
2004.07.11
TAnimate и AVI-файл, вкомпиленный в ресурсы внешней DLL


6-1082543497
ultracrash
2004-04-21 14:31
2004.07.11
Копирование текста(в буфер) в WebBrowser


1-1088357174
Sphinx
2004-06-27 21:26
2004.07.11
Объеденение текста в RichEdit


1-1088084783
Новенький
2004-06-24 17:46
2004.07.11
Вопрос по WebBrowser у.


4-1085754956
Chlavik
2004-05-28 18:35
2004.07.11
Comm Port