📄 update_f.pas
字号:
unit Update_F;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, StdCtrls, DBCtrls, ExtCtrls, Db, IBDatabase, IBSQL;
type
TF_Update = class(TForm)
DBGrid1: TDBGrid;
DBM_SQL: TDBMemo;
Panel1: TPanel;
Splitter1: TSplitter;
Panel2: TPanel;
Bt_Close: TButton;
Bt_Update: TButton;
DBN_Update: TDBNavigator;
procedure Bt_UpdateClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Bt_CloseClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
F_Update: TF_Update;
implementation
uses
Update_DM, Login_F, CommSMDLJF, CommFee;
{$R *.DFM}
procedure TF_Update.Bt_UpdateClick(Sender: TObject);
Var
RequireVer, Ver:String;
Msg:String;
ErrorFound: Boolean;
begin
If Application.MessageBox('执行升级功能请关闭其它正在使用此数据库的程序, 继续吗?','系统提示',MB_YESNO) <> IDYES Then
Exit;
F_Login.IB_Database.Close();
// F_Login.IB_Database.Open();
//以下检测是否为多用户版, 如不是则重建视图v_Ammeter_Data
DM_Update.IBQuery.SQL.Text := 'Select f_Ver From Tb_Ver';
Try//不存在时表示为不支持升级版本
DM_Update.IBQuery.Open();
Ver := Trim(DM_Update.IBQuery['f_Ver']);
Except
DM_Update.IBQuery.SQL.Text := 'Create Table Tb_Ver (f_Ver Char(20), f_Note Char(40))';
DM_Update.IBQuery.ExecSql();
DM_Update.IBQuery.SQL.Text := 'Insert Into Tb_Ver (f_Ver, f_Note) Values ("1.0","单用户版")';
DM_Update.IBQuery.ExecSql();
ShowMessage('系统已加入版本号1.0,请再次执行升级');
Exit;
End;
//通用升级过程
DM_Update.IBQuery.Close();
Try
DM_Update.Tb_Update.Open();
Except
ShowMessage('升级文件未能打开, 升级失败');
Exit;
End;
ShowMessage('请记录升级过程中的错误信息!');
//开始升级
If F_Login.IBX_Transaction.InTransaction Then
F_Login.IBX_Transaction.Commit();
F_Login.IBX_Transaction.StartTransaction();
ErrorFound := False;
DM_Update.Tb_Update.First();
While Not DM_Update.Tb_Update.Eof Do
Begin
//无要求版本时表示任何版本都可以
RequireVer := Trim(DM_Update.Tb_Update.FieldByName('要求版本').AsString);
If ( RequireVer = '') Or (RequireVer = Ver) Then//可以升级
Begin
DM_Update.IBScript.Script.Text := DM_Update.Tb_Update['SQL语句'];
Try
DM_Update.IBScript.ExecuteScript();
Except
Msg := Format('执行序号: %s %s 出错!',[DM_Update.Tb_Update['执行序号'], DM_Update.Tb_Update['说明']]);
If Application.MessageBox(PChar(Msg+', 继续升级吗?'),'升级错误!!!',MB_YESNO) <> IDYES Then
Begin
ErrorFound := True;
Break;
End;
End;
End;
//刚才执行的语句可能更新了版本号
DM_Update.IBQuery.Close();
DM_Update.IBQuery.Open();
Ver := Trim(DM_Update.IBQuery['f_Ver']);
DM_Update.Tb_Update.Next();
End;
If Not ErrorFound Then
Begin
//提交数据更新
F_Login.IBX_Transaction.Commit();
DM_Update.IBQuery.Open();
Ver := Trim(DM_Update.IBQuery['f_Ver']);
If Ver = DM_Update.Tb_Update['版本'] Then//已经升级到最新版本
ShowMessage(Format('恭喜您,数据库系统升级到 Ver: %s版 !',[Ver]))
Else
ShowMessage('升级未成功,可能升级代码有问题!');
End
Else
F_Login.IBX_Transaction.Rollback();
end;
procedure TF_Update.FormShow(Sender: TObject);
Var
DBName:String;
begin
DBName := Format('%s升级.MDB',[gRootPath]);
If Not DM_Update.ADOC_Update.Connected Then
Begin
DM_Update.ADOC_Update.ConnectionString := Format('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Persist Security Info=False',[DBName]);
Try
DM_Update.ADOC_Update.Connected := True;
Finally
;
End;
End;
If DM_Update.ADOC_Update.Connected Then
Begin
DM_Update.Tb_Update.Open();
Bt_Update.Enabled := True;
End
Else
Begin
Bt_Update.Enabled := False;
ShowMessage(Format('升级数据库文件 %s 未能打开',[DBName]));
End;
end;
procedure TF_Update.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM_Update.ADOC_Update.Connected := False;//关闭数据库连接
MyReleaseForm(TForm(F_Update));
end;
procedure TF_Update.Bt_CloseClick(Sender: TObject);
begin
Close();
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -