![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамический запрос
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]Он знает и ты можеш узнать из свойств