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

Вниз

Динамическое создание Fields...   Найти похожие ветки 

 
Alex_C   (2011-12-16 16:10) [0]

Что за ерунда: хочу динамически создать Field для ADODataSet. Делаю как в хелпе:

procedure CreateFields(CreateDataSet: TADODataSet);
var
 i: integer;

 function CreateNewField: TField;
 begin
   Result := nil;
   case FieldTagArray[i].DataType of
     ftSmallint:
       Result := TSmallintField.Create(CreateDataSet);
     ftInteger:
       Result := TIntegerField.Create(CreateDataSet);
     ftDate,ftTime,ftDateTime:
       Result := TDateTimeField.Create(CreateDataSet);
     ftFloat:
       Result := TFloatField.Create(CreateDataSet);
     ftBoolean:
       Result := TBooleanField.Create(CreateDataSet);
     ftString:
       Result := TStringField.Create(CreateDataSet);
   end;
   with Result do
   begin
     FieldName := FieldTagArray[i].FieldName;
     Name := CreateDataSet.Name + FieldName;
     Index := CreateDataSet.FieldCount;
     Size := FieldTagArray[i].Size;
     Tag := FieldTagArray[i].Tag;
     DisplayLabel := FieldName;
     DataSet := CreateDataSet;
   end;
 end;

begin
 CreateDataSet.Fields.Clear;
 for i:= 0 to Length(FieldTagArray) - 1 do
   CreateDataSet.Fields.Add(CreateNewField);
end;

и вместо 10 полей создается в 2 раза больше - 20!!! Если убрать строчку

     DataSet := CreateDataSet;

то зоздается правильно - 10, но DBGrid ругается что не назначен DataSet. Что не так?


 
Ega23 ©   (2011-12-16 16:26) [1]

CreateDataSet.Fields.Clear;
 for i:= 0 to Length(FieldTagArray) - 1 do
   CreateDataSet.Fields.Add(CreateNewField);
 CreateDataSet.CreateDataSet;


А DataSet := CreateDataSet; убери.

И вообще, так обзывать переменные - моветон.


 
Медвежонок Пятачок ©   (2011-12-16 16:28) [2]

поля надо создавать опосредованно, в коллекции TFieldDefs.
твое же создание неправославно.


 
Alex_C   (2011-12-16 16:32) [3]


> И вообще, так обзывать переменные - моветон.


Это я так, на скорую руку... Кстати а как правильно называть?


> поля надо создавать опосредованно, в коллекции TFieldDefs.


Т.е. сначала создавать FieldDefs, а уже затем CreateNewField: TField;?


 
Медвежонок Пятачок ©   (2011-12-16 16:34) [4]

сначала наполнить филдефс, затем пройтись по нему и вызвать креатефилд для каждого.


 
Anatoly Podgoretsky ©   (2011-12-16 16:51) [5]

> Alex_C  (16.12.2011 16:10:00)  [0]

Используй запросы, а не нафигационные средства.


 
Alex_C   (2011-12-16 16:54) [6]


> сначала наполнить филдефс, затем пройтись по нему и вызвать
> креатефилд для каждого.


Большое спасибо! Все заработало!


 
Alex_C   (2011-12-16 16:56) [7]


> Используй запросы


Я это для себя уже ОЧЕНЬ хорошо уяснил - в SQL - основное - запросы!
Поля мне нужны для "правильного" отображения данных: допустим один пользователь хочет, что частота была в Мгц, другой в кГц.


 
Inovet ©   (2011-12-16 17:43) [8]

> [3] Alex_C   (16.12.11 16:32)
> Это я так, на скорую руку... Кстати а как правильно называть?

Create - это действие. Я вот, увидев CreateDataSet, подусал, что это функция сохдающая DataSet, стал смотреть выше по тексту, что я там пропустил, оказалось - это параметр. Ну так и называй его существительным - DataSet, то что он для Create ему Fields, понятно из имени функции. Когда непонятно уточняй прилагательными, например - NewDataSet, OldDataSet, или надо тебе из одного в другой скопировать - SrcDataSet, DstDataSet (от source, destination).

А в дизайнере почему не создать эти поля?


 
Smile   (2011-12-16 20:26) [9]

> Поля мне нужны для "правильного" отображения данных: допустим
> один пользователь хочет, что частота была в Мгц, другой
> в кГц.

Неужели для этого необходимо создавать динамические поля? :(


 
Alex_C   (2011-12-17 00:00) [10]


> А в дизайнере почему не создать эти поля?


> Неужели для этого необходимо создавать динамические поля?
>  :(


Более правильного выхода я не нашел: у меня несколько разных окон с отображением одного и того же лога , но "под разными углами зрения" . Дабы при смене чего бы то ни было не запутаться - для всех окон поля для их датасет создаю динамически - скажем так - из одного места. ))



Страницы: 1 вся ветка

Текущий архив: 2012.04.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
15-1323419423
OW
2011-12-09 12:30
2012.04.08
Отменить наличные деньги. Польза?


15-1323404238
vajo
2011-12-09 08:17
2012.04.08
Удаленный рабочий стол


2-1324039063
ProgRAMmer Dimonych
2011-12-16 16:37
2012.04.08
WSAWaitForMultipleEvents не отпускает по FD_ACCEPT


8-1224519235
REY75
2008-10-20 20:13
2012.04.08
Толщина линии в компонента Chart


15-1322944202
Юрий
2011-12-04 00:30
2012.04.08
С днем рождения ! 4 декабря 2011 воскресенье