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

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

Динамический запрос


Itonix ©   (2006-09-26 18:00:00) 

я создаю запрос динамически в программе.записіваю его в ибКвери.СКЛ.Текст
но количество и названия возвращяемых полей могут разными.
как мне в ибКвери сделать так, что б он знал какие поля ему вернул запрос?


kaif   (2006-09-30 21:43:00) [1]

Попробуй создать поле так после открытия запроса (AfterOpen):

var
 F: TNumericField;
begin
 F := TNumericField.Create(self);
 F.FieldKind := fkCalculated;
 F.FieldName := 'distr';
 F.Name := 'distr';
 F.DataSet := ibQuery;
end;

Я не помню, можно ли добавить к открытому набору поле. Кажется, можно было, хотя боюсь ошибиться.


Itonix   (2006-09-30 19:11:00) [2]

нашел ошибку:
надо было так:
ibQuery.Close;
ibQuery.Fields.Clear;
ibQuery.FieldDefs.Clear;


Itonix   (2006-09-30 12:45:00) [3]

Значит мне ее надо делать ibQuery.Close перед их удалением?
как их правильно все создать , запустить квери ,а потом удалить?может где-то есть статьи или примеры?


Johnmen   (2006-09-30 00:40:00) [4]

В данном контексте они исчезают при ibQuery.Close и появляются при ibQuery.Open


Itonix   (2006-09-29 18:19:00) [5]

если я делаю так при БаттонКлик:
..начало
ibQuery.Close;
ibQuery.FieldDefs.Clear;

...
добавляю в квери запрос,филды( запускаю
ibQuery.SQL.Clear;ibNumDistr.SQL.Text:=query;
ibQuery.Open;ibNumDistr.FetchAll;
//конец поцедуры

если теперь еще раз нажать на кнопку (запуск поцедуры) , то филды не исчезают :( (филдкаунт больше 0)


Johnmen   (2006-09-28 22:26:00) [6]

FieldDefs.Clear


Itonix   (2006-09-28 22:17:00) [7]

как правильно удалить все филды из квери?
у меня суть в чем:
1) при клике на кнопку генериться запрос в зависимости от выбранных юзером полей (энное кол-во полей которое вернет квери и одно расчетное поле (калькулейтед)
2)добавляються филды (как я  выше писал)
3) запускаеться запрос...
4) как удалить все созданные филды из ибКвери?что -б не возникало проблем при повторном нажатии на кнопку?


Itonix   (2006-09-28 21:58:00) [8]

Удалено модератором


Itonix   (2006-09-28 21:58:00) [9]

а можно пример?


Johnmen   (2006-09-27 21:50:00) [10]

Все поля создавать динамически.


Itonix   (2006-09-27 21:45:00) [11]

а как сделать правильно?подскажите пожалуста,никогда раньше єтим не занимался


Johnmen   (2006-09-27 09:07:00) [12]

А что там знать то?
Ты к пустой коллекции описателей полей добавил одно поле. И удивляешься, как так...


Itonix   (2006-09-27 08:51:00) [13]

никто не знает?


Itonix   (2006-09-26 23:10:00) [14]

моя вина - забыл указать что одно поле всегда будет расчетное.
вот так я его создаю в рантайм

if ibNumDistr.Fields.FindField('distr') = nil then
begin
 ibNumDistr.FieldDefs.Add('distr', ftFloat);
 fFieldDef := ibNumDistr.FieldDefs.Find('distr');
 fField := fFieldDef.CreateField(ibNumDistr);
 fField.FieldName := 'distr';
 fField.Name := 'distr';
 fField.FieldKind:=fkCalculated;
end;

но после этого он не видит остальные поля :( , которые возврашяет запрос


Desdechado   (2006-09-26 21:53:00) [15]

и как твое калькулир. поле калькулируется, если в [0] ты говоришь
"количество и названия возвращяемых полей могут разными"
?

а вообще поле можно добавить и в рантайме


Itonix   (2006-09-26 19:06:00) [16]

вот такая проблема.мне в квери необходимо поле типа Калькулейтед, которое создаю в ДизайнТайм. после этого поля которые возвращает запрос не добавляються в ибКвери.
//поле типа Калькулейтед используеться примерно ьак:

procedure TfmRA_Ob_NumDistrOb.ibNumDistrCalcFields(DataSet: TDataSet);
begin
ibNumDistrDistr.AsFloat:=(ibNumDistr.ParamByName('COUNT').AsInteger/ibUCount.AsInteger)*100;
end;

ibNumDistrDistr -fkCalculated -забитое туда в ДизайнТайм


Itonix   (2006-09-26 18:46:00) [17]

Спасибо


Desdechado   (2006-09-26 18:39:00) [18]

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


DSKalugin   (2006-09-26 18:31:00) [19]

Он знает и ты можеш узнать из свойств


Наверх

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