Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как динамически добавить поля типа 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 - уверен, найдется куча примеров


Наверх

Титульная страница Поиск, карта сайта Написать письмо