Форум: "Базы";
Текущий архив: 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.039 c