⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 szgwyq.pas

📁 人力资源管理系统(Delphi程序)大家学习共勉
💻 PAS
字号:
unit szgwyq;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, CheckLst, DBCtrls, DB, ADODB;

type
  TTypeOfSzgwyq=(tosModify,tosBrowse);//调用窗口的方式的美据变量
  TGwyqxm = record   //岗位要求的项目的数据结构
    xmdh:string;     //项目的代号
    xmmc:string;     //项目的名称
    xmbm:string;     //项目对应的数据库中的表名
    dmzd:string;     //项目表中代码字段的名称
    qzzd:string;     //项目表中取值字段的名称
  end;
  TGwyq = record    //岗位要求数据结构
    xm:integer;     //可选项的编号
    xmmc:string;    //可选项的名称
    xmdm:string;    //可选项的代码
    xmqz:boolean;   //可选项的取值
  end;
  TfrmSzgwyq = class(TForm)
    btnOk: TButton;
    btnCancel: TButton;
    GrouopBoxGwbzYq: TGroupBox;
    Label4: TLabel;
    Label8: TLabel;
    MemYszyq: TMemo;
    GroupBox3: TGroupBox;
    ChkLstTJ: TCheckListBox;
    GroupBox4: TGroupBox;
    MemoQtyq: TMemo;
    ADODataSet1: TADODataSet;
    cmbYqxm: TComboBox;
    ADODataSet2: TADODataSet;
    ADOQuery1: TADOQuery;
    procedure cmbYqxmChange(Sender: TObject);
    procedure ChkLstTJClickCheck(Sender: TObject);
    procedure btnOkClick(Sender: TObject);
    procedure MemoQtyqChange(Sender: TObject);
  private
    { Private declarations }
    FTypeOfSzgwyq:TTypeOfSzgwyq ; //调用模块的方式
    FGwbh:string;                 //模块编辑要求的岗位编号
    FGwyqxm: array of TGwyqxm ;   //可编辑要求的代码项目数据结构数组
    FGwyq: array of TGwyq ;       //正在编辑的岗位的岗位要求数组
    FXmStartPos : array of Integer;//项目开始的位置辅助数组
    FQtyq:string;                  //岗位的其他要求

    procedure setTypeOfSzgwyq(value:TTypeOfSzgwyq);
    procedure setGwbh(value:string);
    procedure SaveGwbzyq;
    procedure ReadGwbzyq(Gwbh:string);
    procedure setQtyq(value:string);
    function GwyqToStr:string;
  public
    { Public declarations }
    property TypeOfSzgwyq:TTypeOfSzgwyq read FTypeOfSzgwyq
           write setTypeOfSzgwyq default tosBrowse ;//调用本模块的方式属性
    property Gwbh:string read FGwbh write setGwbh;  //模块编辑的岗位编号
    property Qtyq:string read FQtyq write setQtyq ; //岗位的其他要求
  end;

var
  frmSzgwyq: TfrmSzgwyq;

implementation

uses DM;

{$R *.dfm}

//设置模块的调用方式
procedure TfrmSzgwyq.setTypeOfSzgwyq(value:TTypeOfSzgwyq);
begin
  FTypeOfSzgwyq := value ;
  //根据调用模块的方式设置控件的可用性
  if FTypeOfSzgwyq = tosModify then
  begin
    ChkLstTJ.Enabled := False ;
    MemoQtyq.ReadOnly := true;
  end
  else
  begin
    ChkLstTJ.Enabled := True;
    MemoQtyq.ReadOnly := False;
  end;
end;

//设置需要查询的岗位编号
procedure TfrmSzgwyq.setGwbh(value:string);
begin
  FGwbh := value;
  if trim(FGwbh) = '' then//如果岗位编号为空,则设置控件不可用
  begin
    cmbYqxm.Clear ;
    MemYszyq.Text := '';
    ChkLstTJ.Clear ;
    btnOk.Enabled := false;
    Qtyq := '';
  end
  else
  begin
    ReadGwbzyq(FGwbh) ;   //读出该岗位的岗位要求
    btnOk.Enabled := True ;
  end;
end;

//保存岗位要求
procedure TfrmSzgwyq.SaveGwbzyq;
var
  i:integer;
  strSQl:String ;
begin
  try
    ADOQuery1.Connection.BeginTrans ;
    //以下删除原来岗位要求表中存储的该岗位要求
    strSQl := 'delete from Gwbzyq where Gwbzyq_GWBH = :Gwbh';
    ADOQuery1.SQL.Clear ;
    ADOQuery1.SQL.Add(strSQl);
    ADOQuery1.Parameters.ParamByName('Gwbh').Value:= FGwbh;
    ADOQuery1.ExecSQL ;
    //以下向岗位要求表中插入新的岗位要求
    for i := low(FGwyq) to high(FGwyq) do
    begin
      if not FGwyq[i].xmqz then
      begin
        strSQl := 'insert into Gwbzyq (GwbzYq_gwbh,GwbzYq_xmbh,GwbzYq_qz)'
            + ' values (:gwbh,:xmbh,:qz)';
        ADOQuery1.SQL.Clear ;
        ADOQuery1.SQL.Add(strSQl);
        ADOQuery1.Parameters.ParamByName('Gwbh').Value:= FGwbh;
        ADOQuery1.Parameters.ParamByName('xmbh').Value:=
            FGwyqxm[Fgwyq[i].xm].xmdh;
        ADOQuery1.Parameters.ParamByName('qz').Value:= FGwyq[i].xmdm;
        ADOQuery1.ExecSQL ;
      end;
    end;
    //以下更新岗位编制表中岗位要求文本
    strSQl := 'update Gwbz set gwbz_Yq= :yq where Gwbz_BH = :Gwbh';
    ADOQuery1.SQL.Clear ;
    ADOQuery1.SQL.Add(strSQl);
    if MemoQtyq.Text = '' then
    begin
      MemoQtyq.Text := ' ';
    end;
    ADOQuery1.Parameters.ParamByName('yq').Value:= MemoQtyq.Text;
    ADOQuery1.Parameters.ParamByName('gwbh').Value:= FGwbh ;
    ADOQuery1.ExecSQL ;
    ADOQuery1.Connection.CommitTrans ;
  except
    ShowMessage('保存岗位条件时出现错误!');
  end;
  DataModule1.ADODataSetGwBz.Refresh ;//刷新岗位编制数据集
end;

//读出相应编号的岗位要求
procedure TfrmSzgwyq.ReadGwbzyq(Gwbh:string);
var
  i,j,start: integer;
begin
  start := 0;
  with ADODataSet1 do
  begin
    //以下从岗位编制要求项目表中(gwbzyqxm)读出所有的可用代码表示的
    //项目要求到数组FGwyqxm中
    Active := false;
    CommandText := 'select * from gwbzyqxm ';
    Active := true;
    if not IsEmpty then
    begin
      First ;
      i := 0;
      SetLength(FGwyqxm,RecordCount);
      SetLength(FXmStartPos,RecordCount + 1);
      while not eof do
      begin
        FGwyqxm[i].xmdh := FieldByName('GWBZYQXM_XMDH').AsString ;
        FGwyqxm[i].xmmc := FieldByName('GWBZYQXM_XMMC').AsString ;
        FGwyqxm[i].xmbm := FieldByName('GWBZYQXM_XMBM').AsString ;
        FGwyqxm[i].dmzd := FieldByName('GWBZYQXM_DMZDM').AsString ;
        FGwyqxm[i].qzzd := FieldByName('GWBZYQXM_QZZDM').AsString ;
        FXmStartPos[i] := start ;
        cmbYqxm.Items.Add(FGwyqxm[i].xmmc); //向要求项目下拉框中增加项目
        //以下从岗位编制要求表(gwbzyq)表中读出相应项目的可选项及本岗位
        //对相应项目的要求到数组FGwyq中
        ADODataSet2.Active := false;
        ADODataSet2.CommandText := 'select a.*,b.ID from '
                + FGwyqxm[i].xmbm + ' as a left join '
                + ' (select * from Gwbzyq where GWBZYQ_XMBH = '''
                + FGwyqxm[i].xmdh +''' and GWBZYQ_GWBH = ''' + trim(Gwbh)
                + ''') as b on a.' + FGwyqxm[i].dmzd + ' = b.GWBZYQ_QZ ';
        ADODataSet2.Active := true;
        if not ADODataSet2.IsEmpty then
        begin
          ADODataSet2.First ;
          j := start;
          setLength(FGwyq, start + ADODataSet2.RecordCount );
          while not ADODataSet2.Eof do
          begin
            FGwyq[j].xm := i;
            FGwyq[j].xmmc := ADODataSet2.
                fieldByName(FGwyqxm[i].qzzd).AsString;
            FGwyq[j].xmdm := ADODataSet2.
                fieldByName(FGwyqxm[i].dmzd).AsString;
            FGwyq[j].xmqz := ADODataSet2.FieldByName('ID').IsNull;
            ADODataSet2.Next;
            inc(j);
          end;
          start := j ;
        end;
        Next ;
        Inc(i);
      end;
      FXmStartPos[i] := start ; //记录项目的开始位置
      cmbYqxm.ItemIndex := 0;
      cmbYqxmChange(self);
      MemYszyq.Text := GwyqToStr //将岗位要求转化为字符串并显示
    end;
  end;          
end;

procedure TfrmSzgwyq.cmbYqxmChange(Sender: TObject);
var
  i,count: integer;
begin
  ChkLstTJ.Clear ;
  count := 0;
  //切换项目时在读出相应的需要设置的项目的值
  for i := FXmStartPos[cmbYqxm.ItemIndex] to
    FXmStartPos[cmbYqxm.ItemIndex + 1]-1 do
  begin
    ChkLstTJ.AddItem(Fgwyq[i].xmmc,nil);
    ChkLstTJ.Checked[count] := FGwyq[i].xmqz;
    inc(count);
  end;
end;

procedure TfrmSzgwyq.ChkLstTJClickCheck(Sender: TObject);
var
  i :integer;
  found:boolean;
begin
  //根据用户的选择设定相应项目的取值
  i:= FXmStartPos[cmbYqxm.ItemIndex];
  found := false;
  while (i <= FXmStartPos[cmbYqxm.ItemIndex + 1] - 1 ) and not found do
  begin
    if (FGwyq[i].xm = cmbYqxm.ItemIndex) and
      (FGwyq[i].xmmc = ChkLstTJ.Items[ChkLstTJ.ItemIndex]) then
    begin
      FGwyq[i].xmqz := ChkLstTJ.Checked[ChkLstTJ.ItemIndex];
      found := true;
    end;
    inc(i);
  end;
  MemYszyq.Text  := GwyqToStr ;
end;

function TfrmSzgwyq.GwyqToStr:string;
var
  i,j : integer;
  strYq:string;
  hasLimit:boolean;
begin
  result := '';
  for i := low(FGwyqxm) to high(FGwyqxm) do //逐个检查可设置条件的项目
  begin
    result := result + FGwyqxm[i].xmmc + ':';
    strYq := '';
    hasLimit := false;
    for j := FXmStartPos[i] to FXmStartPos[i+1] - 1 do //检查可选项的取值
    begin
      if FGwyq[j].xmqz then //本可选项值为真
      begin
        strYq := strYq + FGwyq[j].xmmc + ',';//向条件中增加此可选项
      end
      else
      begin
        hasLimit := true;
      end;
    end;
    if not hasLimit then
    begin
      strYq := '无限制条件。';
    end
    else
    begin
      if strYq='' then
      begin
        strYq := '无符合条件';
      end
      else
      begin
        strYq := copy(strYq,0,length(StrYq)-1) + '。';
      end
    end;
    Result := result + strYq + #13#10;
  end;
  Result := result + '其他要求:';
  if trim(MemoQtyq.Text) = '' then
  begin
    Result := Result + '无。';
  end
  else
  begin
    Result := Result + MemoQtyq.Text ;
  end;
end;

procedure TfrmSzgwyq.setQtyq(value:string);
begin
  FQtyq := value;
  MemoQtyq.Text := FQtyq ;
end;

procedure TfrmSzgwyq.btnOkClick(Sender: TObject);
begin
  SaveGwbzyq ;
end;

procedure TfrmSzgwyq.MemoQtyqChange(Sender: TObject);
begin
  MemYszyq.Text := GwyqToStr ;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -