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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.046 c
1-1087979722
Aldor
2004-06-23 12:35
2004.07.11
103, 105 I/O error


3-1086933832
coldplayer
2004-06-11 10:03
2004.07.11
RXDBGrid + ADO. Проблема сортировки.


3-1086943167
Digitman
2004-06-11 12:39
2004.07.11
Ошибка при исполнении MSSQL-скрипта..


1-1087928731
georg
2004-06-22 22:25
2004.07.11
StringGrid Фиксирование ячеек


1-1088434713
Wahnsinng
2004-06-28 18:58
2004.07.11
MsWord





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