Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизКак динамически добавить поля типа fkCalculated к TADOQuery? Найти похожие ветки
← →
Nikolai_S © (2004-03-15 11:04) [0]Как динамически добавить поля типа fkCalculated к TADOQuery?
В TADOQuery изначально поля не заданы, так как SQL-запрос задается динамически и перечень полей может быть различным. При вызове метода TADOQuery.Open поля создаются автоматически. Необходимо к основным полям динамически добавить несколько дополнительных полей (вычисляемых - FieldKind = fkCalculated).
Проблема в том, что к открытому TADOQuery добавлять поля нельзя, а если добавить вычисляемые поля к закрытому TADOQuery, то при его открытии базовые поля запроса не добавляются автоматически.
← →
KSergey © (2004-03-15 11:14) [1]Примерно так:
Field1 := TStringField.Create (..);
Field1.FieldKind := fkCalculated;
Field1.DataSet := ADODatatSet1;
... и проч. св-ства
Впрочем, если вы в любом яндексе наберете Field.Create и fkCalculated - уверен, найдется куча примеров
← →
Nikolai_S © (2004-03-15 11:24) [2]С поиском попробую. Действительно, может что и найду. А вот с Вашим примером я уже пробовал. Как я уже говорил, это работает только для закрытого TADOQuery.
Допустим, я добавил свои вычисляемые поля перед открытием TADOQuery. Теперь другая проблема: при открытии TADOQuery уже не будут автоматически добавлены поля, указанные в SQL-запросе, так как список полей TADOQuery.Fields не пустой.
Т.е., необходимо:
1. Чтобы автоматически добавились поля, указанные в SQL-запросе.
2. Вручную добавить дополнительные вычисляемые поля.
Все вместе, увы, не получается.
← →
Alex123 (2004-03-15 16:15) [3]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;
← →
KSergey © (2004-03-16 07:45) [4]> Nikolai_S © (15.03.04 11:24) [2]
Да, точно я не помню. Хотя, уверен. посиком вполне можно найти.
Попробуйте вместо
Field1.DataSet := ADODatatSet1;
сделать
ADODatatSet1.Fields.Add(Field1);
После Open, конечно же
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.042 c