Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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;


За сим, с уважением...




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.021 c
3-46291           alexandervasjuk       2002-03-21 14:06  2002.04.15  
MySQL. Что день грядущий мне готовит?


14-46483          null                  2002-03-05 19:04  2002.04.15  
Quake 3


14-46519          DPro                  2002-03-06 13:35  2002.04.15  
Дорогие Мастера!


3-46276           Stranger              2002-03-25 16:01  2002.04.15  
Хранение файлов различных типов в полях БД MS SQL Server


1-46398           cranium               2002-03-31 00:25  2002.04.15  
Генератор случайных числе