Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.04.08;
Скачать: [xml.tar.bz2];

Вниз

Динамическое создание 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
2-1324049370
Валерий
2011-12-16 19:29
2012.04.08
Не компилируеться проэкт на удаленной машине


6-1254820466
Tailor_McMaffin
2009-10-06 13:14
2012.04.08
SetupAPI -> GUID устройства


2-1323956306
Besonder
2011-12-15 17:38
2012.04.08
HTTP connection


15-1323376220
Юрий
2011-12-09 00:30
2012.04.08
С днем рождения ! 9 декабря 2011 пятница


8-1222425668
M3
2008-09-26 14:41
2012.04.08
Формат WAV GSM 6.10 Определить длительность звучания





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский