Форум: "Базы";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
ВнизTTable в Run-Time Найти похожие ветки
← →
Lord Vader (2002-03-23 04:59) [0]Подскажите как в Run-Time менять такие свойства у TTable как FieldKind, и прочие... А также, какое существует свойство чтобы TStrings присвоить значиние всех строк столбца таблицы.
Заранее благодарен!!!
← →
Lusha (2002-03-23 11:07) [1]1. FieldKind является свойством TField, а не TTable
2. Изменить значение этого свойства можно при закрытом наборе данных банальным присваиванием, например:
Table1.FieldByName("AnyField").FieldKind := fkCalculated;
Правда при этом существует масса "подводных камней". И поскольку я считаю, что Вы "плывете" в неправильном направлении, у меня к Вам один вопросик, ответ на который мне бы хотелось услышать прежде чем мы продолжим беседу на эту тему. Итак:
Зачем Вам нужно менять свойство FieldKind в Run-Time?
← →
Lord Vader (2002-03-24 10:37) [2]Дело в том, что я имею дело с таблицей в которой заранее не известно сколько будет столбцов в таблице, т.е. таблица с динамической структурой. А мне нужно выполнять для одного из столбцов этой таблицы метод OnCalc...
Так как быть? И то вы подразумеваете, под "закрытым набором данных"? Метод OnClose что ли?
← →
Anatoly Podgoretsky (2002-03-24 11:07) [3]сли структура динамическая, то какая проблема, данное поле является частью этой структуры, динамически.
Закрытый набор - этонабор который не открыт.
← →
Lord Vader (2002-03-25 22:30) [4]Ну так всё ж как быть то? Как код такой замутить и чтоб не выскакивала табличка с ненайденным(несуществующем) полем?
← →
Lusha (2002-03-26 10:39) [5]Извините за задержку с ответом. Отдыхал знаете ли... :)
Описанное Вами сообщение возникает по причине отсутствия предопределенного перечня полей. В виду его отсутствия он определяется автоматически исходя из структуры таблицы при открытии набора данных, но также автоматически и очищается при закрытии оного. Поэтому обращение вида "AnyDataSet.FieldByName("AnyField")" при закрытом наборе данных приводит к сообщению "Field AnyField not found." (я же предупреждал "о подводных камнях")
Лечится это явным определением перечня полей в Run-Time. Только и всего... :)
Делается это приблизительно так...
AnyDataSet.Close;
// Вот так определяется перечень действительных полей
for I := 0 to AnyDataSet.FieldDefs.Count - 1 do
with AnyDataSet, FieldDefs[I] do
begin
case DataType of
ftString :
begin
Field := TStringField.Create(Self);
Field.Size := Size;
end;
ftInteger: Field := TIntegerField.Create(Self);
ftFloat : Field := TFloatField.Create(Self);
ftDateTime : Field := TDateTimeField.Create(Self);
end;
Field.Name := AnyDataSet.Name + Name;
Field.FieldName := Name;
Field.FieldKind := fkData;
Field.DataSet := AnyDataSet;
end;
// А вот так добавляется определение вычисляемого поля
Field := TIntegerField.Create(Self);
with Field do
begin
FieldName := "F1";
Name := AnyDataSet.Name + FieldName;
FieldKind := fkCalculated;
DataSet := AnyDataSet;
end;
AnyDataSet.Open;
где Field : TField;
За сим, с уважением...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c