📄 szgwyq.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 + -