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

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

Add all fields программно


Sour ©   (2005-07-23 06:59:00) 

Как в run-time добавить все поля запроса в свойство Fields TQuery. Чтобы сделать это в disign-time нажимает Add all fields, а как сделать это программно?


Leonid Troyanovsky   (2005-07-24 09:05:00) [1]


> Sour   (23.07.05 13:06) [4]

> with SomeQuery do
> begin
>  Close; //здесь Fields.Count = 0
>  SQL.LoadFromFile('sql.sql'); //Пусть запрос возвращет 4
..
Как их добавить? Не самому же парсить SQL.



 Примерно так:

 FieldDefs.Update;
 for i := 0 to FieldDefs.Count-1 do
   FieldDefs[i].CreateField(Self);

--
Regards, LVT.


evvcom   (2005-07-23 15:09:00) [2]

Либо все поля в designtime определять, либо написать свой компонент-наследник от нужного тебе DataSet-а, в котором добавить событие OnCreateFields, перекрыть метод CreateFields, вызвать в нем inherited и потом обработчик события OnCreateFields. Можно для удобства добавить методы CreateCalcField и CreateLookupField. А в обработчике эти методы и вызывать.


Sour   (2005-07-23 13:06:00) [3]

Как добавлены?

Пример 1:
with SomeQuery do
begin
 Close; //здесь Fields.Count = 0
 SQL.LoadFromFile('sql.sql'); //Пусть запрос возвращет 4 поля
 Open; //здесь Fields.Count = 0
 //здесь Fields.Count = 4
end;
Все замечательно - действительно после открытия 4 поля.

Пример 2:
with SomeQuery do
begin
 Close; //здесь Fields.Count = 0
 SQL.LoadFromFile('sql.sql'); //Пусть запрос возвращет 4 поля

 NewCalcField := TStringField.Create(SomeQuery);
 NewCalcField.FieldKind := fkCalculated;
 NewCalcField.Name := 'fiNewCalcField';
 NewCalcField.FieldName := 'my_calc_field';
 NewCalcField.Size := 255;
 NewCalcField.DataSet := SomeQuery;

 Open; //здесь Fields.Count = 0
 //!!! А здесь Fields.Count = 1. В списке только одно поле - my_calc_field, а мне помимо него еще все поля запроса нужны!!

Как их добавить? Не самому же парсить SQL.
end;


Anatoly Podgoretsky   (2005-07-23 12:54:00) [4]

Они уже добавлены


Sour   (2005-07-23 11:59:00) [5]

Да, но если, я создам еще одно поле (например, вычисляемое) и добавлю его в Fields, то в результате оно одно в списке и останется. Если ничего не добавлять, то конечно, в списке Fields будут все поля запроса.

Мне надо добавить все поля из запроса и создать еще несколько вычисляемых.


Sergey Masloff   (2005-07-23 11:38:00) [6]

а они и сами добавятся


Наверх

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