左边的分页对象PageCtrlUser设置了“用户”、“用户角色”、“角色”和“角色权限”4个选项页,每个选项页上放置一个TDBGrid对象。右边的分页对象PageCtrlInfor与左边的相对应,也设置了“用户信息”、“用户角色信息”、“角色信息”和“角色权限信息”4个选项页,每个选项页上对象的设置情况如图1右下部、图2所示,除“用户角色信息” 选项页中的“角色ID”是TCheckListBox对象外,其他都是数据感知组件,分别通过DataSource属性指向各自对应的TDataSource对象,DataField属性设置需显示数据的字段名,具体可参考图2中各个对象中显示的数据,如DBTextBirthday就表示显示Birthday字段的数据。
1.2.2 代码设计
⑴ 因为存在两种不同的用户,查询时要用到教师信息表和学生信息表,而这两个表的字段名是不同的,故在该单元文件的implementation后设计了一个全局变量“strKeyField”用于存放表的关键信息(用户ID和用户名)。
var // 存放查询所需的关键信息(用户ID和用户名)
strKeyField : Array[0..1] of String;
⑵ 图2-图“用户角色信息”选项页中的“角色ID”CheckListBoxRole对象,显示的是系统中存在的所有角色及当前用户所拥有的角色信息,供系统管理员使用打勾方式分配,因此需要编制一个过程将系统角色表中的所有角色以列表的方式显示在CheckListBoxRole对象的列表框中,详细代码如下:
procedure TFormRightManage.CheckListBoxRole_AddRole;
begin
CBoxSearchType.Style := csDropDownList;
// 为角色ID列表框CheckListBoxRole添加角色
CheckListBoxRole.Items.Clear;
with DMServerDB do begin
ADODataSetRole.First;
while Not ADODataSetRole.Eof do begin
CheckListBoxRole.Items.Add(ADODataSetRole.FieldValues['RoleID']
+','+ADODataSetRole.FieldValues['RoleName']);
ADODataSetRole.Next;
end;
end;
end;
⑶ 设计查询按钮代码。按不同的用户类型和不同的查询类型,动态生成SQL语句。如图2右下部的“用户信息”选项页中的“用户ID”DBTextUserID对象、“用户名”DBTextUserName对象和“学院”DBTextUserUnit对象,在查询教师时要需教师ID、教师名和该教师所在学院;查询学生时则要显示学号、学生名和所在班级,因此这三个对象需要根据不同的用户设置不同的字段名,相关代码如下:
procedure TFormRightManage.SBtnSearchClick(Sender: TObject);
begin
ADODataSet_User.Close;
if CBoxUserType.ItemIndex=0 then begin // 教师
strSQL:='Select T.TeacherID, TeacherName, T.DepartmentID, DepartmentName, Sex, Birthday, Phone, Email';
|