Как на Dialogpage создать Tmonthcalendar?
Andrey26RUS
Краснодар
Привет!
Перед генерацией отчета нужно у пользователя спросить две даты: "С ..." и "По ...".
Причем это необязательно. Т.е. одну из дат, либо обе, можно не вводить.
Далее, эти даты передаются в запросе как параметры процедуры:
r.DBXQuery1.SQL.Add('select * from Employees.rep_info_source('+amin+','+amax+')');
Если юзер дату оставляет пустой, то amin:='null' или amax:='null'.
ПРОБЛЕМА ВОТ В ЧЕМ:
Раз должна быть возможность оставлять дату пустой, то TfrxDateEditControl тут не подходит.
Поместил на форму два TfrxMaskEditControl
Рядом с каждым - кнопка вызова календарика TMonthControl
var
c:TMonthCalendar;
...
procedure Button3OnClick(Sender: TfrxComponent);
var
r:TfrxReport;
begin
r:=Report;
c:=TMonthCalendar.Create(Sender);
c.top:=0;
c.left:=0;
c.Parent:=TWinControl(DialogPage1); // ВОТ ТУТ ВОТ И ПРОБЛЕМА - Access Violation ...
c.Show;
end;
Как этот компонент-календарик показать на форме?
Перед генерацией отчета нужно у пользователя спросить две даты: "С ..." и "По ...".
Причем это необязательно. Т.е. одну из дат, либо обе, можно не вводить.
Далее, эти даты передаются в запросе как параметры процедуры:
r.DBXQuery1.SQL.Add('select * from Employees.rep_info_source('+amin+','+amax+')');
Если юзер дату оставляет пустой, то amin:='null' или amax:='null'.
ПРОБЛЕМА ВОТ В ЧЕМ:
Раз должна быть возможность оставлять дату пустой, то TfrxDateEditControl тут не подходит.
Поместил на форму два TfrxMaskEditControl
Рядом с каждым - кнопка вызова календарика TMonthControl
var
c:TMonthCalendar;
...
procedure Button3OnClick(Sender: TfrxComponent);
var
r:TfrxReport;
begin
r:=Report;
c:=TMonthCalendar.Create(Sender);
c.top:=0;
c.left:=0;
c.Parent:=TWinControl(DialogPage1); // ВОТ ТУТ ВОТ И ПРОБЛЕМА - Access Violation ...
c.Show;
end;
Как этот компонент-календарик показать на форме?
Комментарии
Во-вторых, почему бы не использовать нормальные параметры в запросе?
Например:
Query1.SQL.Text := 'select * from Employees.rep_info_source(:MIN_DATE, :MAX_DATE)';
А затем присваивать параметры:
Query1.ParamByName('MIN_DATE').Value := MinDate;
Query1.ParamByName('MAX_DATE').Value := MaxDate;
Где MinDate и MaxDate типа Variant, в которых записано либо Null либо выбранная дата.
В-третьих, вместо кнопки и календаря лучше использовать TfrxCheckBoxControl и TfrxDateEditControl.
Если CheckBox.Checked, то Calendar.Enabled := True иначе False
И по кнопке OK присваивать соответствующие параметры.