я согласен, что Дейт дорогой (700 руб), но у меня нет ни малейшего желания вколачивать главу про null хоть сюда, хоть на сайт. Тем более что глава приличного размера.Если он (Дейт) не будет против, буду рад прочитать хотя бы эту главу на сайте.
Железо, пользователи, сеть
щас загрызу, честное слово.В таком случае, скажите пожалуйста полное название издания... буду искать.
открываешь www.ibase.ru, Документация, и докручиваешь страницу до изображений книжек. Там есть Дейт и ссылка на него.
к слову. там что-то около 1200-1300 страниц великолепной бумаги, да еще и мелким шрифтом напечатано. т.е. объем там немаленький.
Здравствуйте, Господа!
Вопрос общий: планирую дать пользователю возможность выбирать оборудование по разным признакам (инвентарный номер, тип, находится в ремонте или нет, кто им пользуется), так вот и проблема,как это лучше оформить в клиентском приложении? Т.е как проанализировать на клиенте, какой фильтр или группу фильтров выбрал пользователь и с учетом этого сформировать запрос.
С уважением, Londinium
Вопрос общий: планирую дать пользователю возможность выбирать оборудование по разным признакам (инвентарный номер, тип, находится в ремонте или нет, кто им пользуется), так вот и проблема,как это лучше оформить в клиентском приложении? Т.е как проанализировать на клиенте, какой фильтр или группу фильтров выбрал пользователь и с учетом этого сформировать запрос.
С уважением, Londinium
Зависит от того, как ты оформишь представление этой информации для выбора.londinium писал(а):как это лучше оформить в клиентском приложении?
Чем предоставляешь на клиенте эту возможность, то и анализируй. К примеру, если инвентарный номер задаёшь в TEdit, то анализируй TEdit.Textlondinium писал(а):Т.е как проанализировать на клиенте, какой фильтр или группу фильтров выбрал пользователь
Я никак не могу красиво описать то, что видел в одной программе, но все-таки попробую.
Итак, на форме лежит два TMemo. В одном хранятся строки-описания различных фильтров(например, выбрать по коду, инвентарному номеру и т.д). Пользователь выбирает один или несколько фильтров и щелчком по кнопке "Установить фильтр" копирует их в другой TMemo.
Выбравши все фильтры, какие необходимо, нажимает на кнопку "выполнить запрос" и,как ни удивительно , запрос выполняется. Вот мне хочется повторить такое же. Разработчики сего чуда находится далеко, кроме него, никто не знает, как это работает. Поэтому вся надежда на Вас.
На всякий случай, если кому интересно, могу прислать снимок окна, которое я попытался описать.
С уважением, Londinium
Итак, на форме лежит два TMemo. В одном хранятся строки-описания различных фильтров(например, выбрать по коду, инвентарному номеру и т.д). Пользователь выбирает один или несколько фильтров и щелчком по кнопке "Установить фильтр" копирует их в другой TMemo.
Выбравши все фильтры, какие необходимо, нажимает на кнопку "выполнить запрос" и,как ни удивительно , запрос выполняется. Вот мне хочется повторить такое же. Разработчики сего чуда находится далеко, кроме него, никто не знает, как это работает. Поэтому вся надежда на Вас.
На всякий случай, если кому интересно, могу прислать снимок окна, которое я попытался описать.
С уважением, Londinium
С этим не ко мнеlondinium писал(а): А если не по уму?
Ну в общем и целом - да... Пяток своих классов, тыщи три строк кода и потом код прикладного модуля выглядит примерно такlondinium писал(а): Чувствую, что в основе лежит простая идея
Код: Выделить всё
FormShow:
GrupFilter:=TfrUniFilter.Create(Self);
GrupFilter.FormName:='GRUPLST';
GrupFilter.MainTableName:='SEB_GRUPP';
GrupFilter.Caption:='Условия отбора ценовых групп';
StartCnd:=TCondClass.Create(Self);
StartCnd.Tip:=Starting;
StartCnd.UppCase:=True;
StartCnd.CondList:=TStringList.Create;
StartCnd.FieldNames:='G.Name';
ContCnd:=TCondClass.Create(Self);
ContCnd.Tip:=Containing;
ContCnd.UppCase:=True;
ContCnd.CondList:=TStringList.Create;
ContCnd.FieldNames:='G.Name';
ValCnd:=TCondClass.Create(Self);
ValCnd.Tip:=RecKod;
ValCnd.FieldNames:='G.Valuta';
ValCnd.SrcFields:='Code';
ValCnd.CondList:=TStringList.Create;
ValCnd.CodeList:=TStringList.Create;
iqrFlPrp.SQL.Clear;
iqrFlPrp.SQL.Add('Select Code, Sname');
iqrFlPrp.SQL.Add('From Valutes');
iqrFlPrp.SQL.Add('Order By SName');
iqrFlPrp.Open;
While Not iqrFlPrp.Eof Do
begin
ValCnd.AddItem(TrimRight(iqrFlPrp.FieldByName('SName').AsString),iqrFlPrp,False);
iqrFlPrp.Next;
end;
iqrFlPrp.Close;
HideCnd:=TCondClass.Create(Self);
HideCnd.Tip:=Yes_No;
HideCnd.FieldNames:='G.Hidden="Д"';
HideCnd.IsSet:=True;
HideCnd.YesNo:=False;
CnPriceCnd:=TCondClass.Create(Self);
CnPriceCnd.Tip:=Diap_FL;
CnPriceCnd.AfterZap:=0;
CnPriceCnd.FieldNames:='G.FxCnPrice';
...
GrupFilter.AddFiltCond('Наименование начинается с',StartCnd);
GrupFilter.AddFiltCond('Наименование содержит',ContCnd);
GrupFilter.AddFiltCond('Показывать удалённые',HideCnd);
GrupFilter.AddFiltCond('Валюта закупки',ValCnd);
GrupFilter.AddFiltCond('Себестоимость',CnPriceCnd);
...
procedure bbFilterClick(Sender: TObject);
Var I,C,S:Integer;
begin
GrupFilter.ShowModal;
if GrupFilter.Changed then
MakeQuery;
end;
Procedure MakeQuery;
begin
With Q Do
begin
Close;
SQL:=MainSQLContaner.Text;
AddSQLList(StartCnd,SQL);
AddSQLList(ContCnd,SQL);
AddSQLList(HideCnd,SQL);
AddSQLList(ValCnd,SQL);
AddSQLList(CnPriceCnd,SQL);
...
SQL.Add(GrupSort.GetOrderBy);
SQL.Add(PlanContainer.Text);
Open;
end
end