![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как создать вычисляемое поле
Саня © (2003-06-06 17:49:00)программным путём? (чтоб оно считало сумму трёх других)
Соловьев (2003-06-12 09:47:00) [1]
with MySql do
begin
DataBaseName := "cadr";
with FieldDefs do
begin
Add("phone", ftFloat, 0, true);
FieldDefs[0].CreateField(MySql);
end;
end;
Саня (2003-06-12 09:26:00) [2]Всем огромное спасибо, особенно Соловьеву (09.06.03 11:12),
его пример работает, а пример PI{}Puk (09.06.03 11:25)
выдаёт много ошибок. Всё хорошо уважаемые мастера, но
теперь как добавить в DataSet программно не вычисляемые поля(Data).
В хелпе нашёл как сделать, работает . Но в комбинации
с примерами PI{}Puk и Соловьёва- не работает
(создаётся только калькулируемое поле).
Давайте добьём мою проблему доконца.
PI{}Puk (2003-06-09 11:25:00) [3]можно также добавить калькулируемое поле и прямо в TDataSet
пр. типа
var bbb: TField;
...
bbb := Tfield.Create(Self);
bbb.FieldName := "bbb";
bbb.FieldKind := fkCalculated;
bbb.SetFieldType(ftInteger);
DM.Query.FieldDefs.Add("bbb",ftInteger,0,False);
DM.Query.Fields.Add(bbb);
...
а самое оптимальное это как говорит Sandman25 © - в динамическом
запросе
Соловьев (2003-06-09 11:12:00) [4]Numer: TIntegerField;
...
with MySql do
begin
DataBaseName := "cadr";
AutoCalcFields := true;
OnCalcFields := MyCalcFields;
Numer := TIntegerField.Create(MySql);
with Numer do
begin
FieldName := "Numer";
Calculated := True;
DataSet := MySql;
Name := MySql.Name + FieldName;
MySql.FieldDefs.Add(Name, ftInteger, 0, true);
end;
end;
end;
....
procedure TFirstForm.MyCalcFields(DataSet: TDataSet);
begin
TDataSet(DataSet).FieldByName("Numer").asInteger := <функция>;
end;
Sandman25 (2003-06-09 10:57:00) [5]Соловьев © (09.06.03 10:23)
Мне кажется, автор спрашивает, как добавить вычисляемое поле.
Что-нибудь типа
with Query.Fields.Add do
....
Соловьев (2003-06-09 10:23:00) [6]не-а не прокатит :(
без количесва поле нельзя решить.
А чем не устраивает?
> procedure TForm1.ADOQuery1CalcFields(DataSet: TDataSet);
> var L:sting; i:integer;
> begin
> i:=0;
> for i:=0 to ADOQuery1.FieldCount-1 do begin
> L:=ADOQuery1.Fields.Fields[i].FieldName
> if ADOQuery1.FieldValues[L]="0" tnen inc(i);
> end;
> end;
Соловьев (2003-06-09 10:20:00) [7]
> таблица заполнена только двумя значениями
> "0" или "1" и нужно подсчитать колво "0" в каждой записи.
> Колво полей неизвестно. Как быть?
select count(field1)
from table
where field1=0
Rol (2003-06-09 06:54:00) [8]>ladybird гм... девушка... это где в природе такой Сиквел встречается?
Саня (2003-06-08 16:38:00) [9]Ну?
Саня (2003-06-07 14:19:00) [10]А если будет сложное условие..
Допустим: таблица заполнена только двумя значениями
"0" или "1" и нужно подсчитать колво "0" в каждой записи.
Колво полей неизвестно. Как быть? Если бы знать число полей-
то было так:
Два клика по ADOQuery1->New field->Calculeted
А в
procedure TForm1.ADOQuery1CalcFields(DataSet: TDataSet);
var L:sting; i:integer;
begin
i:=0;
for i:=0 to ADOQuery1.FieldCount-1 do begin
L:=ADOQuery1.Fields.Fields[i].FieldName
if ADOQuery1.FieldValues[L]="0" tnen inc(i);
end;
end;
Но как программно сделать сделать Calculeted поле?
ladybird (2003-06-06 17:51:00) [11]SELECT A, B, C, SUM(A+B+C) as D from xTABLE T