⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 update_f.pas

📁 县级供电企业电费核算源码, 在客户处正常运行8年以上, Delphi 5开发,数据库为Interbase/Firebird, 深入使用Procedure和Trigger等, 对入门者具有很好的参考价值
💻 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 + -