Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли создать объект-поле класса TField динамически? [D5, IB5.x, IB6.x]


User_OKA ©   (2002-10-02 08:34:00) 

С помощью редактора полей все гладко и красиво, на на этапе конструирования список полей мне неизвестен, т.к. я использую один TpFIBDataSet для нескольких таблиц. А хочется и лишние поля скрыть, и LookUp-поля организовать (колонки TDBGrid с PickList что-то не хочется).
Знаю, что если объект-поля не созданы, они создаются автоматически, а как до них достучаться? По имени TpFIBDataset.Name+<имя поля> не получается.


User_OKA   (2002-10-03 08:33:00) [1]

First_May © (02.10.02 12:55)
как раз то, что нужно!
Спасибо!


First_May   (2002-10-02 12:55:00) [2]

Я делал поля динамически вот так и работает:

var TmpField: TStringField;

TmpField:=TStringField.Create(nil);
TmpField.FieldName:="comm";
TmpField.Name:=QList.Name+TmpField.FieldName;
TmpField.DataSet:=QList;
QList.FieldDefs.UpDate;


User_OKA   (2002-10-02 12:45:00) [3]

to Sergey13 © (02.10.02 10:57)
Список таблиц и полей этих таблиц мне известен, так как эту информацию я храню в своей базе данных в специальных таблицах. Преимущество в том, что при изменении состава полей или чего-то еще не придется копаться в исходном коде приложения. Достаточно будет подкорректировать эти специальные таблицы.
Спасибо за совет. Обязательно попробую.


Alexander Vasjuk   (2002-10-02 12:10:00) [4]

User_OKA © (02.10.02 09:57)
Через MyIBDataSet.Fields[x] я получу доступ к значению поля с номером x. А мне нужно изменять/настраивать само поле.

Не так.
MyIBDataSet.Fields[x] и есть само поле


Sergey13   (2002-10-02 10:57:00) [5]

2User_OKA © (02.10.02 08:34)
> я использую один TpFIBDataSet для нескольких таблиц.
Для определенного количества или для любого?
> А хочется и лишние поля скрыть, и LookUp-поля организовать
А, таки наверное определенных, если знаешь какие поля скрывать.
> на на этапе конструирования список полей мне неизвестен
Так не известен, или может быть разным?

Не совсем понятны условия. В любом случае для абстрактного вопроса типа select * from anytable, для таблицы, состав которой ты не знаешь(тогда откуда знаешь ее имя?), тебе нужно этот состав узнать через системные таблицы (какие не скажу - не знаю). Ибо без знания наименований/типов полей тебе не обойтись. Если же эта инфа у тебя есть(запрос то ты сам составляешь) то используя FieldDefs собирай свой набор как хочешь - в хелпе очень приличный пример есть.

Если число датасетов всетаки известен, ИМХО, лучше их все таки прописать в дизайнере. Плюсов от этого, опять же ИМХО, больше чем минусов.


antdrnc   (2002-10-02 10:12:00) [6]

Попробуйте использовать TDataSet.FieldDefs.

Query1.Close;
Query1.FieldDefs.Update;
for i:=0 to Query1.FieldDefs.Count-1 do
if (...) then
Query1.FieldDefs.Items[i].CreateField(Query1);
Query1.Open;


Johnmen   (2002-10-02 09:58:00) [7]

FieldByName уже отменили ?


User_OKA   (2002-10-02 09:57:00) [8]

Max Zyuzin © (02.10.02 08:58)
Не то. Через MyIBDataSet.Fields[x] я получу доступ к значению поля с номером x. А мне нужно изменять/настраивать само поле.


Max Zyuzin   (2002-10-02 08:58:00) [9]

А по порядковому номеру пробовали? Я по опыту работы с TIBDataSet... что то вроде MyIBDataSet.Fields[x]. и т.д.


Наверх

Титульная страница Поиск, карта сайта Написать письмо