Текущий архив: 2003.07.07;
Скачать: CL | DM;
Вниз
Как создать вычисляемое поле Найти похожие ветки
← →
Саня (2003-06-06 17:49) [0]программным путём? (чтоб оно считало сумму трёх других)
← →
ladybird (2003-06-06 17:51) [1]SELECT A, B, C, SUM(A+B+C) as D from xTABLE T
← →
Саня (2003-06-07 14:19) [2]А если будет сложное условие..
Допустим: таблица заполнена только двумя значениями
"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 поле?
← →
Саня (2003-06-08 16:38) [3]Ну?
← →
Rol (2003-06-09 06:54) [4]>ladybird гм... девушка... это где в природе такой Сиквел встречается?
← →
Соловьев (2003-06-09 10:20) [5]
> таблица заполнена только двумя значениями
> "0" или "1" и нужно подсчитать колво "0" в каждой записи.
> Колво полей неизвестно. Как быть?
select count(field1)
from table
where field1=0
← →
Соловьев (2003-06-09 10:23) [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;
← →
Sandman25 (2003-06-09 10:57) [7]Соловьев © (09.06.03 10:23)
Мне кажется, автор спрашивает, как добавить вычисляемое поле.
Что-нибудь типа
with Query.Fields.Add do
....
← →
Соловьев (2003-06-09 11:12) [8]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;
← →
PI{}Puk (2003-06-09 11:25) [9]можно также добавить калькулируемое поле и прямо в 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-12 09:26) [10]Всем огромное спасибо, особенно Соловьеву (09.06.03 11:12),
его пример работает, а пример PI{}Puk (09.06.03 11:25)
выдаёт много ошибок. Всё хорошо уважаемые мастера, но
теперь как добавить в DataSet программно не вычисляемые поля(Data).
В хелпе нашёл как сделать, работает . Но в комбинации
с примерами PI{}Puk и Соловьёва- не работает
(создаётся только калькулируемое поле).
Давайте добьём мою проблему доконца.
← →
Соловьев (2003-06-12 09:47) [11]
with MySql do
begin
DataBaseName := "cadr";
with FieldDefs do
begin
Add("phone", ftFloat, 0, true);
FieldDefs[0].CreateField(MySql);
end;
end;
Страницы: 1 вся ветка
Текущий архив: 2003.07.07;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.006 c