从北京回来有一个星期了,想想刚刚做完的这个项目,其实也有很多东西要总结的。
1、作为一个安全类的软件系统,有几种功能是不能缺少的。其实这几个功能也不算很难,但是如果没有,就很难通过测评中心(国家级)的评测。
a、超时认证保护功能
在系统间隔某端时间,无人使用,系统将自动切换至登陆界面。
function fGetKXTime //得到当前空闲的时间,ms
var
t :TLastInputInfo;
begin
t.cbSize := SizeOf(TLastInputInfo);
GetLastInputInfo(t);
result := GetTickCount - t.dwTime;
end;
b、密码强度的问题
口令长度要够,不能是全数字或全字母,要数字和字母的组合。
c、登陆口令错误次数限制
当口令错误几次后,必须锁定系统一段时间,然后,才能再试。
d、角色要分开
系统必须有管理员和审计员两个角色,审计员一定能看到管理员的操作日志。
e、导入导出
能够自由导出数据,及导入数据
f、数据库空间报警
对使用sql server的数据库来说,这一功能应该也不能少。
以上这些都是基础功能,但是对于一个安全类的软件,是不能缺少的。
2、ehlib控件的使用(二)
上一篇博客写了使用(一),这一次接着写。
a、点击列标题排序
procedure SortDBGridEh(Sender :TObject; ACol :Integer; Column :TColumnEh);
var
FieldName, SortStr: string;
begin
Screen.Cursor := crHourGlass;
try
if (Sender is TDBGridEh) and
((Sender as TDBGridEh).DataSource.DataSet <> nil) then
begin
if not ((Sender as TDBGridEh).DataSource.DataSet is TCustomADODataSet) then
Exit;
if not (Sender as TDBGridEh).DataSource.DataSet.Active then
Exit;
FieldName := Column.FieldName;
if (Sender as TDBGridEh).DataSource.DataSet.FindField(FieldName).IsBlob then
Exit;
if (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).FieldKind =
fkData then
SortStr := FieldName
else if (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).FieldKind =
fkLookup then
FieldName := (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).KeyFields
else
FieldName := '';
if (FieldName = '') or (Pos(';', FieldName) > 0) then
Exit;
case Column.Title.SortMarker of
smNoneEh:
begin
Column.Title.SortMarker := smUpEh;
TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort :=
FieldName;
end;
smUpEh:
begin
Column.Title.SortMarker := smDownEh;
TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort :=
FieldName + ' DESC';
end;
smDownEh:
begin
Column.Title.SortMarker := smNoneEh;
TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort := '';
end;
end;
end;
finally
Screen.Cursor := crDefault;
end;
end;
首先要设置列标题为按钮,其次在单击事件中调用上面的代码
b、打印表格
首先放一个PrintDbGridEh控件到form上,然后设置属性prnt1.DBGridEh := dbgrid2;最后再prnt2.Preview;就可以了。
如果需要打印表头,需要设置BeforGridText属性。
c、输出数据
procedure pExport(grid1 :TDBGridEh);
var
ExpClass :TDBGridEhExportClass;
ext :String;
dlg : TSaveDialog;
begin
dlg := TSaveDialog.Create(nil);
dlg.Filter := 'txt文件(*.txt)|*.txt|csv文件(*.csv)|*.csv|htm文件(*.htm)|*.htm|rtf文件(*.rtf)|*.rtf|xls文件(*.xls)|*.xls';
if dlg.Execute then
begin
case dlg.FilterIndex of
1: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end;
2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;
3: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'html'; end;
4: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'rtf'; end;
5: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end;
6: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xml'; end;
else
ExpClass := nil; Ext := '';
end;
if ExpClass <> nil then
begin
if UpperCase(Copy(dlg.FileName,Length(dlg.FileName)-2,3)) <> UpperCase(Ext) then
dlg.FileName := dlg.FileName + '.' + Ext;
SaveDBGridEhToExportFile(ExpClass,grid1,dlg.FileName,True);
end;
end;
dlg.Free;
end;
1、作为一个安全类的软件系统,有几种功能是不能缺少的。其实这几个功能也不算很难,但是如果没有,就很难通过测评中心(国家级)的评测。
a、超时认证保护功能
在系统间隔某端时间,无人使用,系统将自动切换至登陆界面。
function fGetKXTime //得到当前空闲的时间,ms
var
t :TLastInputInfo;
begin
t.cbSize := SizeOf(TLastInputInfo);
GetLastInputInfo(t);
result := GetTickCount - t.dwTime;
end;
b、密码强度的问题
口令长度要够,不能是全数字或全字母,要数字和字母的组合。
c、登陆口令错误次数限制
当口令错误几次后,必须锁定系统一段时间,然后,才能再试。
d、角色要分开
系统必须有管理员和审计员两个角色,审计员一定能看到管理员的操作日志。
e、导入导出
能够自由导出数据,及导入数据
f、数据库空间报警
对使用sql server的数据库来说,这一功能应该也不能少。
以上这些都是基础功能,但是对于一个安全类的软件,是不能缺少的。
2、ehlib控件的使用(二)
上一篇博客写了使用(一),这一次接着写。
a、点击列标题排序
procedure SortDBGridEh(Sender :TObject; ACol :Integer; Column :TColumnEh);
var
FieldName, SortStr: string;
begin
Screen.Cursor := crHourGlass;
try
if (Sender is TDBGridEh) and
((Sender as TDBGridEh).DataSource.DataSet <> nil) then
begin
if not ((Sender as TDBGridEh).DataSource.DataSet is TCustomADODataSet) then
Exit;
if not (Sender as TDBGridEh).DataSource.DataSet.Active then
Exit;
FieldName := Column.FieldName;
if (Sender as TDBGridEh).DataSource.DataSet.FindField(FieldName).IsBlob then
Exit;
if (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).FieldKind =
fkData then
SortStr := FieldName
else if (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).FieldKind =
fkLookup then
FieldName := (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).KeyFields
else
FieldName := '';
if (FieldName = '') or (Pos(';', FieldName) > 0) then
Exit;
case Column.Title.SortMarker of
smNoneEh:
begin
Column.Title.SortMarker := smUpEh;
TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort :=
FieldName;
end;
smUpEh:
begin
Column.Title.SortMarker := smDownEh;
TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort :=
FieldName + ' DESC';
end;
smDownEh:
begin
Column.Title.SortMarker := smNoneEh;
TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort := '';
end;
end;
end;
finally
Screen.Cursor := crDefault;
end;
end;
首先要设置列标题为按钮,其次在单击事件中调用上面的代码
b、打印表格
首先放一个PrintDbGridEh控件到form上,然后设置属性prnt1.DBGridEh := dbgrid2;最后再prnt2.Preview;就可以了。
如果需要打印表头,需要设置BeforGridText属性。
c、输出数据
procedure pExport(grid1 :TDBGridEh);
var
ExpClass :TDBGridEhExportClass;
ext :String;
dlg : TSaveDialog;
begin
dlg := TSaveDialog.Create(nil);
dlg.Filter := 'txt文件(*.txt)|*.txt|csv文件(*.csv)|*.csv|htm文件(*.htm)|*.htm|rtf文件(*.rtf)|*.rtf|xls文件(*.xls)|*.xls';
if dlg.Execute then
begin
case dlg.FilterIndex of
1: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end;
2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;
3: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'html'; end;
4: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'rtf'; end;
5: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end;
6: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xml'; end;
else
ExpClass := nil; Ext := '';
end;
if ExpClass <> nil then
begin
if UpperCase(Copy(dlg.FileName,Length(dlg.FileName)-2,3)) <> UpperCase(Ext) then
dlg.FileName := dlg.FileName + '.' + Ext;
SaveDBGridEhToExportFile(ExpClass,grid1,dlg.FileName,True);
end;
end;
dlg.Free;
end;