Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.15;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
1-46336
Malder
2002-04-03 22:56
2002.04.15
А как очистить канву (TCanvas) ?


6-46477
SemFLY
2002-01-27 20:44
2002.04.15
Вопрос по компонентам INDY - > TIdTCPServer и TIdTCPClient


1-46360
MAxiMum
2002-04-03 19:42
2002.04.15
Pascal + ООП = ???


3-46286
Vitek
2002-03-26 12:43
2002.04.15
Database Desktop


1-46430
sany
2002-04-02 23:44
2002.04.15
Людииииии хелп!!!