![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как динамически добавить поля типа fkCalculated к TADOQuery? [D6, MSSQL]
Nikolai_S © (2004-03-15 11:04:00)Как динамически добавить поля типа fkCalculated к TADOQuery?
В TADOQuery изначально поля не заданы, так как SQL-запрос задается динамически и перечень полей может быть различным. При вызове метода TADOQuery.Open поля создаются автоматически. Необходимо к основным полям динамически добавить несколько дополнительных полей (вычисляемых - FieldKind = fkCalculated).
Проблема в том, что к открытому TADOQuery добавлять поля нельзя, а если добавить вычисляемые поля к закрытому TADOQuery, то при его открытии базовые поля запроса не добавляются автоматически.
KSergey (2004-03-16 07:45:00) [1]> Nikolai_S © (15.03.04 11:24) [2]
Да, точно я не помню. Хотя, уверен. посиком вполне можно найти.
Попробуйте вместо
Field1.DataSet := ADODatatSet1;
сделать
ADODatatSet1.Fields.Add(Field1);
После Open, конечно же
Alex123 (2004-03-15 16:15:00) [2]procedure TForm1.Table1BeforeOpen(DataSet: TDataSet);
var
I: Integer;
Field: TField;
begin
if Table1.FindField('FldUD') <> nil then Exit;
Table1.FieldDefs.Clear;
Table1.FieldDefs.Update;
Table1.Fields.Clear;
{ Вот пример того, как вы можете добавить дополнительные, вычисленные поля }
Field := TBooleanField.Create(Table1);
Field.FieldName := 'fldUD';
Field.Calculated := True;
Field.DisplayLabel := 'Удл';
Field.ReadOnly := true;
Field.Index := 1;
Field.DataSet := Table1;
{ Создаем все поля из определений и добавляем к набору данных. }
for I := 0 to Table1.FieldDefs.Count - 1 do
begin
{ Вот где мы действительно сообщаем набору данных о необходимости создания поля. }
{ Поле "назначается", но нам нужно не это, нам нужна просто ссылка на новое поле. }
Field := Table1.FieldDefs[I].CreateField(Table1);
end;
end;
Nikolai_S (2004-03-15 11:24:00) [3]С поиском попробую. Действительно, может что и найду. А вот с Вашим примером я уже пробовал. Как я уже говорил, это работает только для закрытого TADOQuery.
Допустим, я добавил свои вычисляемые поля перед открытием TADOQuery. Теперь другая проблема: при открытии TADOQuery уже не будут автоматически добавлены поля, указанные в SQL-запросе, так как список полей TADOQuery.Fields не пустой.
Т.е., необходимо:
1. Чтобы автоматически добавились поля, указанные в SQL-запросе.
2. Вручную добавить дополнительные вычисляемые поля.
Все вместе, увы, не получается.
KSergey (2004-03-15 11:14:00) [4]Примерно так:
Field1 := TStringField.Create (..);
Field1.FieldKind := fkCalculated;
Field1.DataSet := ADODatatSet1;
... и проч. св-ства
Впрочем, если вы в любом яндексе наберете Field.Create и fkCalculated - уверен, найдется куча примеров