📄 backupaccountform.pas
字号:
unit BackupAccountForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, EditForm, KsSkinTabs, KsSkinButtons,
KsSkinForms, KsSkinLabels, dxCntner, dxEditor, dxExEdtr, dxEdLib, dxDBELib,
syspublic, DB, ADODB, se_controls, KsSkinSpeedButtons;
type
TfrmBackupAccount = class(TfrmEditForm)
bbOk: TSeSkinButton;
bbNo: TSeSkinButton;
PageControl: TSeSkinPageControl;
TabBackupAccount: TSeCustomTabSheet;
TabRestoreAccount: TSeCustomTabSheet;
SeSkinLabel1: TSeSkinLabel;
SeSkinLabel2: TSeSkinLabel;
SeSkinLabel3: TSeSkinLabel;
SeSkinLabel4: TSeSkinLabel;
edtBackup: TdxButtonEdit;
SaveFileDialog: TSaveDialog;
OpenDlg: TOpenDialog;
SeSkinLabel5: TSeSkinLabel;
edtRestore: TdxButtonEdit;
SeSkinLabel6: TSeSkinLabel;
lblName: TSeSkinLabel;
edtName: TdxEdit;
lblCoName: TSeSkinLabel;
edtCoName: TdxEdit;
KsCustomTabSheet1: TSeCustomTabSheet;
SeSkinLabel7: TSeSkinLabel;
SeSkinLabel8: TSeSkinLabel;
SeSkinLabel10: TSeSkinLabel;
edtUpdate: TdxButtonEdit;
lblName_u: TSeSkinLabel;
edtName_u: TdxEdit;
lblCoName_u: TSeSkinLabel;
edtCoName_u: TdxEdit;
ADOSetLogin: TADODataSet;
procedure bbOkClick(Sender: TObject);
procedure edtBackupButtonClick(Sender: TObject;
AbsoluteIndex: Integer);
procedure bbNoClick(Sender: TObject);
procedure edtRestoreButtonClick(Sender: TObject;
AbsoluteIndex: Integer);
procedure edtUpdateButtonClick(Sender: TObject;
AbsoluteIndex: Integer);
private
{ Private declarations }
bReturn: Boolean;
lPubBackUP: Integer;
procedure MainShow;
procedure LoadData;
function RestoreMsg: boolean;
function UpDateMsg: boolean;
function NewLoginDB(sName, sCoName, sPath: string): boolean;
procedure BackUpAccount;
procedure RestoreAccount;
procedure UpDateAccount;
function UpDateImport(sOldPath, sNewPath: string): Boolean;
public
{ Public declarations }
end;
function BackupAccountShow(lBackUP: Integer): Boolean;
{lBackUP:=0 备份,lBackUP=1 恢复,lBackUP=2升级}
implementation
uses DBData;
{$R *.dfm}
function BackupAccountShow(lBackUP: Integer): Boolean;
var
frmBackupAccount: TfrmBackupAccount;
begin
frmBackupAccount := TfrmBackupAccount.Create(Application);
with frmBackupAccount do
begin
lPubBackUP := lBackUP;
MainShow;
Result := bReturn;
Free;
end;
end;
procedure TfrmBackupAccount.MainShow;
begin
bReturn := False;
LoadData;
ShowModal;
end;
procedure TfrmBackupAccount.LoadData;
begin
case lPubBackUP of
1: PageControl.TabIndex := 1;
2: PageControl.TabIndex := 2;
else
PageControl.TabIndex := 0;
end;
edtBackup.Text := GetExePath + FILE_BACKUP_DIR + '\' + SYSAccountBookName +
DateToStr2(Now) + '.RBAK';
OpenDlg.InitialDir := GetExePath + FILE_BACKUP_DIR;
end;
function TfrmBackupAccount.RestoreMsg: boolean;
begin
Result := CheckEditEmpty(1, self, [lblName.Name, lblCoName.Name],
[edtName.Name, edtCoName.Name]);
if not Result then Exit;
if edtRestore.Text = '' then
begin
MsgBox('新输入账套路径!', '提示', MB_OK);
Result := false;
end
else
if Pos(':\', edtRestore.Text) = 0 then
begin
MsgBox('新输入完整账套路径!', '提示', MB_OK);
Result := false;
end
else
if not FileExists(edtRestore.Text) then
begin
MsgBox('系统找不到指定的文件!', '提示', MB_OK);
Result := False;
end
else
if not GetDataSetEmptyEx(frmData.ADOConnetLogin, 'SELECT * FROM Login l Where l.Name=''' +
Trim(edtName.Text) + '''') then
begin
ShowMsg('已存在相同名称的账套,不能继续,请在账套管理器中删除同名账套!');
Result := False;
end;
end;
function TfrmBackupAccount.UpDateMsg: boolean;
begin
Result := CheckEditEmpty(1, self, [lblName_u.Name, lblCoName_u.Name],
[edtName_u.Name, edtCoName_u.Name]);
if not Result then
Exit;
if edtUpdate.Text = '' then
begin
MsgBox('新输入账套路径!', '提示', MB_OK);
Result := false;
end
else
if Pos(':\', edtUpdate.Text) = 0 then
begin
MsgBox('新输入完整账套路径!', '提示', MB_OK);
Result := false;
end
else
if not FileExists(edtUpdate.Text) then
begin
MsgBox('系统找不到指定的文件!', '提示', MB_OK);
end
else
if not GetDataSetEmptyEx(frmData.ADOConnetLogin, 'SELECT * FROM Login l Where l.Name=''' +
Trim(edtName_u.Text) + '''') then
begin
ShowMsg('已存在相同名称的账套,不能继续,请在账套管理器中删除同名账套!');
Result := False;
end;
end;
procedure TfrmBackupAccount.bbOkClick(Sender: TObject);
begin
inherited;
case PageControl.TabIndex of
0: BackUpAccount;
1: RestoreAccount;
2: UpDateAccount;
end;
if bReturn = True then
Close;
end;
procedure TfrmBackupAccount.BackUpAccount;
begin
if CopyFile(pchar(SYSAccountBookPath), pchar(edtBackup.Text), False) then
begin
ShowMsg('备份数据成功!文件路径是' + edtBackup.Text);
bReturn := True;
end
else
ShowMsg('备份数据失败,请检查文件路径是否正确?');
end;
function TfrmBackupAccount.NewLoginDB(sName, sCoName, sPath: string): boolean;
var
sSql: string;
begin
Result := False;
sSql := 'SELECT * FROM Login l ';
if not OpenDataSetEx(frmData.ADOConnetLogin, ADOSetLogin, sSql) then Exit;
ADOSetLogin.Insert;
ADOSetLogin.FieldByName('Name').AsString := sName;
ADOSetLogin.FieldByName('CoName').AsString := sCoName;
ADOSetLogin.FieldByName('Path').AsString := sPath;
Result := SaveDataSet(ADOSetLogin, False);
ADOSetLogin.Close;
end;
procedure TfrmBackupAccount.RestoreAccount;
var
sFile: string;
begin
if not RestoreMsg then Exit;
sFile := GetExePath + FILE_DATA_DIR + '\' + edtName.Text + '.RDB';
if not CopyFile(pchar(edtRestore.Text), pchar(sFile), False) then Exit;
if NewLoginDB(edtName.Text, edtCoName.Text, sFile) then
begin
ShowMsg('账套' + edtName.Text + '恢复成功!');
bReturn := True;
end;
end;
function TfrmBackupAccount.UpDateImport(sOldPath, sNewPath: string): Boolean;
var
ADOCon1, ADOCon2: TADOConnection;
ADOSet1, ADOSet2: TADODataSet;
sSql: string;
function Start2Connect: Boolean;
begin
Result := False;
with ADOCon1 do
begin
ADOCon1 := TADOConnection.Create(Self);
if Connected = True then Close;
ConnectionString := GetConnectionString(sOldPath);
LoginPrompt := False;
Open('Admin', '');
if Connected = False then //以前的没有密码现在有密码
begin
ConnectionString := GetConnectionStringOld(sOldPath);
LoginPrompt := False;
Open('Admin', '');
if Connected = False then Exit;
end;
end;
with ADOCon2 do
begin
ADOCon2 := TADOConnection.Create(Self);
if Connected = True then Close;
ConnectionString := GetConnectionString(sNewPath);
LoginPrompt := False;
Open('Admin', '');
if Connected = False then Exit;
end;
Result := True;
end;
begin
Result := False;
if not Start2Connect then Exit;
ADOSet1 := TADODataSet.Create(nil);
ADOSet2 := TADODataSet.Create(nil);
sSql := 'SELECT * FROM BaseInfo'; //小信息
if OpenDataSetEx(ADOCon1, ADOSet1, sSql) and OpenDataSetEx(ADOCon2, ADOSet2, sSql) then
DataSetImport(ADOSet1, ADOSet2);
sSql := 'SELECT * FROM Depot'; //仓库
if OpenDataSetEx(ADOCon1, ADOSet1, sSql) and OpenDataSetEx(ADOCon2, ADOSet2, sSql) then
DataSetImport(ADOSet1, ADOSet2);
sSql := 'SELECT * FROM Employe'; //职员
if OpenDataSetEx(ADOCon1, ADOSet1, sSql) and OpenDataSetEx(ADOCon2, ADOSet2, sSql) then
DataSetImport(ADOSet1, ADOSet2);
sSql := 'SELECT * FROM Unit'; //单位
if OpenDataSetEx(ADOCon1, ADOSet1, sSql) and OpenDataSetEx(ADOCon2, ADOSet2, sSql) then
DataSetImport(ADOSet1, ADOSet2);
sSql := 'SELECT * FROM Ware'; //商品
if OpenDataSetEx(ADOCon1, ADOSet1, sSql) and OpenDataSetEx(ADOCon2, ADOSet2, sSql) then
DataSetImport(ADOSet1, ADOSet2);
sSql := 'DELETE FROM BillSetup '; //初始单据配置
ExecSql(sSql);
ADOSet1.Free;
ADOSet2.Free;
Result := True;
end;
procedure TfrmBackupAccount.UpDateAccount;
var
sFile: string;
function SaveMdbFile(sPath: string): Boolean;
begin
Result := True;
if Result and not ResSaveMainDB(GetExePath, 'MainDB', sPath) then
begin
MsgBox('新建账套失败,请重新选择路径!', '提示', MB_OK);
Result := False;
end;
end;
begin
if not UpDateMsg then Exit;
sFile := GetExePath + FILE_DATA_DIR + '\' + edtName_u.Text + '.RDB';
if not SaveMdbFile(sFile) then Exit;
if not NewLoginDB(edtName_u.Text, edtCoName_u.Text, sFile) then Exit;
if not UpDateImport(edtUpdate.Text, sFile) then Exit;
bReturn := True;
ShowMsg('恭喜您,升级账套成功!');
end;
procedure TfrmBackupAccount.edtBackupButtonClick(Sender: TObject;
AbsoluteIndex: Integer);
begin
inherited;
SaveFileDialog.FileName := edtBackup.Text;
if SaveFileDialog.Execute then
begin
edtBackup.Text := SaveFileDialog.FileName;
end;
end;
procedure TfrmBackupAccount.bbNoClick(Sender: TObject);
begin
inherited;
Close;
end;
procedure TfrmBackupAccount.edtRestoreButtonClick(Sender: TObject;
AbsoluteIndex: Integer);
begin
inherited;
if OpenDlg.Execute then
begin
edtRestore.Text := OpenDlg.FileName;
end;
end;
procedure TfrmBackupAccount.edtUpdateButtonClick(Sender: TObject;
AbsoluteIndex: Integer);
begin
inherited;
if OpenDlg.Execute then
begin
edtUpdate.Text := OpenDlg.FileName;
end;
end;
end.
//此源码由程序太平洋收集整理发布,任何人都可自由转载,但需保留本站信息
//╭⌒╮┅~ ¤ 欢迎光临程序太平洋╭⌒╮
//╭⌒╭⌒╮╭⌒╮~╭⌒╮ ︶ ,︶︶
//,︶︶︶︶,''︶~~ ,''~︶︶ ,''
//╔ ╱◥███◣═╬╬╬╬╬╬╬╬╬╗
//╬ ︱田︱田 田 ︱ ╬
//╬ http://www.5ivb.net ╬
//╬ ╭○╮● ╬
//╬ /■\/■\ ╬
//╬ <| || 有希望,就有成功! ╬
//╬ ╬
//╚╬╬╬╬╬╬╬╬╬╬╗ ╔╬╬╬╬╝
//
//说明:
//专业提供VB、.NET、Delphi、ASP、PB源码下载
//包括:程序源码,控件,商业源码,系统方案,开发工具,书籍教程,技术文档
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -