// Если текущая группа НЕ содержит веществ
If (NOT DM.hasSubstanses(DM.cdsGroupsGROUP_ID.AsInteger))
then begin
// Текущая запись становится родительской:
DM.p_Group_Code := DM.cdsGroupsGROUP_ID.AsInteger ;
paInd.Caption := DM.cdsGroupsGROUP_NAME.AsString ;
// Закрываем набор данных, если он открыт:
if DM.cdsGroups.Active then DM.cdsGroups.Close ;
// Выборка подгрупп по коду родительской группы:
DM.taGroups.ParamByName('pG').AsInteger := DM.p_Group_Code ;
DM.cdsGroups.Open ;
End;
end;
procedure TfmGrSub.bbRootClick(Sender: TObject);
{ *************************************************
* Переход к первому уровню иерархии групп. *
************************************************* }
begin
// Текущая запись становится родительской:
DM.p_Group_Code := 1 ;
paInd.Caption := 'Свойства веществ' ;
// Закрываем набор данных, если он открыт:
if DM.cdsGroups.Active then DM.cdsGroups.Close ;
DM.taGroups.ParamByName('pG').AsInteger:= DM.p_Group_Code;
DM.cdsGroups.Open ;
end;
procedure TfmGrSub.bTestClick(Sender: TObject);
begin // кнопка для ТЕСТИРОВАНИЯ процедур
if DM.hasSubstanses(DM.cdsGroupsGROUP_ID.AsInteger) then
Showmessage('Вещества имеются!')
else Showmessage('Веществ НЕТУ!')
end;
procedure TfmGrSub.bbUpClick(Sender: TObject);
{ **********************************************************
* Переход к родительской группе (на уровень вверх). *
**********************************************************}
begin
// Определяем номер родительской записи:
DM.p_Group_Code := DM.NumParent(DM.cdsGroupsUGROUP_ID.AsInteger) ;
// Индикация имени родительской группы:
paInd.Caption := DM.NameParent(DM.p_Group_Code) ;
// Закрываем набор данных, если он открыт:
if DM.cdsGroups.Active then DM.cdsGroups.Close ;
// Выборка подгрупп по коду родительской группы:
DM.taGroups.ParamByName('pG').AsInteger:= DM.p_Group_Code;
DM.cdsGroups.Open ;
end;
Function TfmGrSub.ChoiceSubstance :Boolean;
{***********************************************************
* Выбор вещества. Результат записывается в переменные, *
* Находящиеся в модуле данных. *
***********************************************************}
begin
Result := false;
bbOK.Visible := True ; bbCancel.Visible := True ;
// Запустим форму в модальном режиме
// и контролируем нажатие кнопки выбора:
If (ShowModal = mrOk) then
If ( NOT DM.cdsSubstanceSUB_ID.IsNull ) then
if ( DM.cdsSubstanceSUB_ID.AsInteger > 0) then
begin
DM.Num_Substance :=
DM.cdsSubstanceSUB_ID.AsInteger ;
DM.name_Substance :=
DM.cdsSubstanceS_NAME.AsString ;
Result := True ;
end;
bbOK.Visible := False ; bbCancel.Visible := false ;
end;
function RusValToEng(s: String): string;
{ ****************************************
** Преобразует число в виде строки **
** из русского формата в английкий. **
**************************************** }
var pp:integer;
begin
Result:=s;
pp:=Pos(',', s); //определяет позицию запятой в строке
//если позиция меньше 0 то запятой присваивается точка:
if (pp>0) then Result[pp]:='.';
end;
Function GetReal(s:String) :Extended;
{ ***********************************************
** Преобразует строку в вещесвенное число. **
*********************************************** }
begin
// преобразовует строку из русского в английский
// заменяя запятую на точку
s:=RusValToEng(s);
Val(s,Result,Code);
if Code <> 0 then Result := 0;
end;
function CheckReal(ed: TEdit):Boolean;
{ **************************************************
** Проверяет строку на возможность **
** преобразования в вещественное число. **
** Возвращает true в случае отсутствия ошибок. **
************************************************** }
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.