📄 main_dataencrypt.pas
字号:
unit Main_DataEncrypt;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls,IniFiles, Mask,
DB, ADODB, RzButton, RzEdit, RzCmboBx, RzTabs, RzLstBox, RzChkLst,
RzPanel, Grids, DBGrids, RzDBGrid, U_Basefrm, DBGridEh, RzPrgres;
type
TMain_DataEncrypt_Frm = class(TFrmBase)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Label1: TLabel;
RzEdit2: TRzEdit;
RzEdit3: TRzEdit;
Label3: TLabel;
Image1: TImage;
Image2: TImage;
Label4: TLabel;
RzComboBox1: TRzComboBox;
RzButton1: TRzButton;
RzButton2: TRzButton;
Con1: TADOConnection;
qry1: TADOQuery;
Rzedit1: TRzComboBox;
RzPageControl1: TRzPageControl;
TabSheet1: TRzTabSheet;
TabSheet2: TRzTabSheet;
RzPanel1: TRzPanel;
RzPanel2: TRzPanel;
RzButton3: TRzButton;
qry2: TADOQuery;
qry3: TADOQuery;
Label5: TLabel;
qry4: TADOQuery;
ds1: TDataSource;
qry5: TADOQuery;
lbl1: TLabel;
RzCheckList1: TRzCheckList;
RzButton4: TRzButton;
RzCheckList2: TRzCheckList;
RzButton6: TRzButton;
RzButton5: TRzButton;
RzDBGrid1: TRzDBGrid;
RzProgressBar1: TRzProgressBar;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure RzButton1Click(Sender: TObject);
procedure RzButton2Click(Sender: TObject);
procedure RzButton3Click(Sender: TObject);
procedure RzButton4Click(Sender: TObject);
procedure RzListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure RzButton5Click(Sender: TObject);
procedure RzButton6Click(Sender: TObject);
private
{ Private declarations }
procedure DataBaseName_Ini; //初始化当前SQL服务的所有用户库名
procedure ServerName_Ini; //初始化内网内的所有SQLSERVER服务器名
function FieldHaveEncryptCheck_Ini:Boolean; //因为MD5加密后不可逆所以要对当前表字段进行检查,如果已经加过密不能再次加密
public
end;
var
Main_DataEncrypt_Frm: TMain_DataEncrypt_Frm;
IniFilePath: string; //配置文件路径
TableName: string; //选择表名
FieldStr: string; //当前选的字段
FieldList: TStringList; //保存初始选表结构和第一次选择的表字段信息
implementation
uses Main_DataEncrypt_Const,Global,UnitFyMd5,uODBCListSqlServers;
{$R *.dfm}
//从ini文件中读取已经保存的连接
procedure TMain_DataEncrypt_Frm.FormCreate(Sender: TObject);
var
myIniFile: TIniFile;
begin
IniFilePath := ExtractFilePath(Application.ExeName) + 'Config.ini';
if FileExists(IniFilePath) then
begin
try
myIniFile := TIniFile.Create(IniFilePath);
RzEdit1.Text := myIniFile.Readstring('Connect','Server','');
RzEdit2.Text := myIniFile.ReadString('Connect','UserID','');
RzEdit3.Text := myinifile.ReadString('Connect','Password','');
RzComboBox1.Text := myinifile.ReadString('Connect','DataBaseName','');
finally
myIniFile.Free;
end;
end;
ServerName_Ini;
end;
//将当前的数据库连接信息写入ini文件
procedure TMain_DataEncrypt_Frm.RzButton2Click(Sender: TObject);
var
myIni: TIniFile;
begin
If FileExists(IniFilePath) then
begin
try
myIni := TIniFile.Create(IniFilePath);
myIni.WriteString('Connect','Server',Trim(RzEdit1.Text));
myIni.WriteString('Connect','DataBaseName',Trim(RzComboBox1.Text));
myIni.WriteString('Connect','UserID',Trim(RzEdit2.Text));
myIni.WriteString('Connect','Password',Trim(RzEdit3.Text));
ShowMessage(MsgSaveIniInfoSuccess);
finally
myIni.Free;
end;
end;
end;
{
function TMain_DataEncrypt_Frm.ReadStrFromIni(IniFileName, Master,Detail: string): string;
var
myIni: TIniFile;
begin
try
myIni := TIniFile.Create(IniFileName);
Result := myIni.ReadString(Master,Detail,'');
finally
myIni.Free;
end;
end;
}
procedure TMain_DataEncrypt_Frm.ServerName_Ini;
var
Ls1: TStringList;
Ls2: TStringList;
I,J: Integer;
SqlServerScanner:TServersSearcher;
begin
inherited;
{Ls1 := TStringList.Create;
Ls2 := TStringList.Create;
if GetServerList(Ls1) then
begin
for i := 0 to Ls1.Count -1 do
begin
if GetUsers(Ls1.Strings[I],Ls2) then
begin
for j := 0 to Ls2.Count - 1 do
begin
Rzedit1.Items.Add(Ls2.Strings[J]);
end;
end;
end;
end;
Ls1.Destroy;
Ls2.Destroy; }
SqlServerScanner:=TServersSearcher.Create(Rzedit1.Items);
SqlServerScanner.FreeOnTerminate:=True;
SqlServerScanner.Resume;
end;
function TMain_DataEncrypt_Frm.FieldHaveEncryptCheck_Ini: Boolean;
var
myIni: TIniFile;
i: Integer;
CompareStr: string; //已经保存的加过密的字段
begin
Result := False;
if FileExists(IniFilePath) then
begin
myIni := TIniFile.Create(IniFilePath);
try
CompareStr := myini.ReadString('FieldCheck',TableName,'');
finally
myIni.Free;
end;
end;
if Pos(FieldStr,CompareStr) > 0 then
begin
myIni := TIniFile.Create(IniFilePath);
try
myini.WriteString('FieldCheck',TableName,'');
myIni.WriteString('FieldCheck',TableName,CompareStr);
finally
myIni.Free;
end;
ShowMessage(MsgFieldHaveExists);
Result := false;
end else
begin
myIni := TIniFile.Create(IniFilePath);
try
myIni.WriteString('FieldCheck',TableName,CompareStr + ',' + FieldStr);
finally
myIni.Free;
end;
Result := True;
end;
end;
procedure TMain_DataEncrypt_Frm.DataBaseName_Ini;
var
SqlStr: string;
begin
SqlStr := 'SELECT name AS databasename FROM master.dbo.sysdatabases';
if Con1.Connected then
begin
qry1.Connection := Con1;
OpenDataSetEx(qry1,sqlstr);
qry1.First;
while not qry1.Eof do
begin
RzComboBox1.Items.Add(qry1.FieldbyName('DatabaseName').AsString);
qry1.next;
end;
end;
end;
//创建SQL连接
procedure TMain_DataEncrypt_Frm.RzButton1Click(Sender: TObject);
var
server,DataBase,UserID,Pwd: string;
ConStr: string;
begin
if Con1.Connected then
begin
Con1.Connected := False;
RzButton1.Caption := MsgConnect;
Image1.Visible := True;
Image2.Visible := False;
Exit;
end;
server := Trim(RzEdit1.Text);
DataBase := Trim(RzComboBox1.Text);
UserID := Trim(RzEdit2.Text);
Pwd := Trim(RzEdit3.Text);
ConStr := 'Provider=SQLOLEDB.1' +
';Data Source=' + server +
';User ID=' + UserID +
';Password=' + Pwd +
';Initial Catalog=' + DataBase +
';Persist Security Info=True';
if not Con1.Connected then
Con1.ConnectionString := ConStr;
try
Con1.Connected := True;
Image1.Visible := False;
Image2.Visible := True;
DataBaseName_Ini;
RzButton1.Caption := MsgDisConnect;
except
Application.MessageBox(PChar(MsgConnectWrong),PChar(MsgPrompt),MB_OK);
ModalResult := mrNone;
end;
end;
//列出当前数据名称下的数据表
procedure TMain_DataEncrypt_Frm.RzButton3Click(Sender: TObject);
var
SqlStr: string;
begin
RzCheckList2.Items.Clear;
if RzComboBox1.Text <> '' then
SqlStr := ' select name as TableName from ' + RzComboBox1.Text + '.dbo.sysobjects where xtype=''U'' order by Name'
else
SqlStr := ' select name as TableName from dbo.sysobjects where xtype=''U'' order by Name';
OpenDataSetEx(qry2,SqlStr);
if not qry2.IsEmpty then
begin
qry2.First;
while not qry2.Eof do
begin
RzCheckList2.Items.Add(qry2.fieldbyname('TableName').AsString);
qry2.Next;
end;
RzCheckList2.ItemIndex := 1;
end;
end;
//选择特处理字段
procedure TMain_DataEncrypt_Frm.RzButton4Click(Sender: TObject);
var
Sqlstr: string;
begin
RzCheckList1.Items.Clear;
TableName := RzCheckList2.SelectedItem;
if TableName <> '' then
begin
Sqlstr := 'select b.name as FieldName from ' + RzComboBox1.Text + '.dbo.sysobjects as a,dbo.syscolumns as b where a.xtype=''U'' and a.name = ' +
QuotedStr(TableName) + ' and a.id=b.id ';
OpenDataSetEx(qry3,Sqlstr);
if not qry3.IsEmpty then
begin
qry3.First;
while not qry3.Eof do
begin
RzCheckList1.Items.Add(qry3.fieldbyname('FieldName').AsString);
qry3.Next;
end;
end;
end;
end;
procedure TMain_DataEncrypt_Frm.RzListBox1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
TableName := RzCheckList2.SelectedItem;
Application.ProcessMessages;
RzButton4Click(Sender);
end;
//列出所有字段明文
procedure TMain_DataEncrypt_Frm.RzButton5Click(Sender: TObject);
var
FieldStr2: string;
Sqlstr: string;
i: Integer;
begin
FieldStr := '';
for i := 0 to RzCheckList1.Items.Count -1 do
begin
FieldStr2 := '';
if RzCheckList1.ItemChecked[I] then
begin
FieldStr2 := RzCheckList1.Items.Strings[I];
FieldStr := FieldStr + ',' + FieldStr2;
end;
end;
if pos(',',FieldStr) > 0 then
FieldStr := Copy(FieldStr,Pos(',',FieldStr) + 1,length(fieldStr));
if FieldStr <> '' then
Sqlstr := 'select ' + FieldStr + ' from ' + TableName
else
sqlstr := 'select * from ' + TableName;
OpenDataSetEx(qry4,Sqlstr);
RzButton6.Enabled := True;
end;
procedure TMain_DataEncrypt_Frm.RzButton6Click(Sender: TObject);
var
SqlStr: string;
FieldName_Str: string;
FieldValues: String;
i: Integer;
begin
for i := 0 to RzCheckList2.Items.Count -1 do
begin
if RzCheckList2.ItemChecked[I] then
begin
TableName := RzCheckList2.SelectedItem;
//与初始化的表结构的比对过程
if FieldHaveEncryptCheck_Ini then
begin
FieldStr := FieldStr + ',';
if Pos(',',FieldStr) > 0 then
begin
FieldName_Str := Trim(Copy(FieldStr,1,Pos(',',FieldStr)-1));
Delete(FieldStr,1,Pos(',',FieldStr)-1);
qry4.First;
while not qry4.Eof do
begin
FieldValues := Trim(qry4.fieldbyname(FieldName_Str).AsString);
SqlStr := 'Update ' + TableName + ' set ' + FieldName_Str + '=' +
quotedstr(unitfymd5.md5tostring(UnitFyMd5.md5(Trim(qry4.fieldbyname(FieldName_Str).AsString)))) +
' where ' + FieldName_Str + ' = ' + quotedstr(FieldValues);
Con1.BeginTrans;
try
OpenDataSetEx(qry5,SqlStr);
Con1.committrans;
except
Con1.RollbackTrans;
raise;
end;
qry4.Next;
end;
end;
RzButton6.Enabled := False;
end else
begin
Exit;
end;
end;
end;
end;
initialization
FieldList := TStringList.Create;
FieldList.Sorted := False;
FieldList.Duplicates := dupAccept;
finalization
FieldList.Free;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -