45IT.COM- 电脑学习从此开始!
DIY硬件教程攒机经验装机配置
设计Photoshop网页设计特效
系统注册表DOS系统命令其它
存储主板显卡外设键鼠内存
维修显卡CPU内存打印机
WinXPVistaWin7unix/linux
CPU光驱电源/散热显示器其它
修技主板硬盘键鼠显示器光驱
办公ExcelWordPowerPointWPS
编程数据库CSS脚本PHP
网络局域网QQ服务器
软件网络系统图像安全
页面导航: 首页 > 设计学院 > 网络编程 > 数据库 >

数据库升级及维护

电脑软硬件应用网 45IT.COM 时间:2009-05-09 17:24 作者:佚名
介绍了用Delphi语言操作SQL Server数据库,实现对已有表字段的增加及数据库的备份和恢复

关键词  VPN,端口影射,表更新

 

 

一、概述

数据库应用系统开发完成后,发布和使用前需要要了解后台数据库网络连接方式和具体的配置方法,因为客户实际的网络环境各不相同。一般客户端软件运行在局域网环境下,也有的客户终端不在本地,可以通过VPNSQL Server 端口影射方法连接到数据库服务器。VPN是虚拟专用网的简称,利用公网(Internet)资源实现端对端的访问,这种方式客户端就像在局域网里一样地访问和操作数据库服务器。实际使用过程中也有通过路由器端口影射的方法,将SQL Server默认端口影射到内部局域网数据库服务器上,客户端通过公网IP地址(路由器地址)访问和操作数据库服务器。下面从两个方面来论述应用数据库的维护。

二、数据库表更新升级

在实际的应用软件使用过程中,由于业务上新需求的变化,客户会在功能方面提出新的要求,这样客户端软件就需要增加新的功能来满足用户的要求。如在客户端软件中要加入数据库表升级的功能。下面用实际使用的数据库表升级过程来描述。首先查询要新增的字段在指定数据库表是否存在,如果不存在,使用ALTER TABLE命令新增字段。该升级功能由一个查询函数和一个升级过程来完成。

function find_field(tname,tfield: string): boolean;

var

i: integer;

begin

   result := false;

   dmsw.adqupgrade.TableName := tname;

   dmsw.adqupgrade.Active := true;

   for i := 0 to dmsw.adqupgrade.FieldCount-1 do

 begin

   if dmsw.adqupgrade.Fields[i].FieldName=tfield then

 begin

   result := true;

   dmsw.adqupgrade.Active := false;

   exit;

   end;

   end;

   dmsw.adqupgrade.Active := false;

end;

 

对两个数据库表添加字段,并指定字段名称、数据类型、数据长度。

procedure database_upgrade();

var

 j,i: integer;

 tname: array [0..2] of string;

begin

 tname[0] := 'meter_model';

 tname[1] := 'customer';

TRY

 dmsw.ADCServer.BeginTrans;

 for i := 0 to 1 do

begin

 case i of

 0:

begin

 if not find_field(tname[i],'produceplace') then

begin

 dmsw.adcupdatetable.CommandText := 'ALTER TABLE water_meter_model ADD  produceplace VARCHAR(50) NULL';

 dmsw.adcupdatetable.Execute;

 end;

end;

 1:

begin

if not find_field(tname[i],'customer_num') then

begin

 dmsw.adcupdatetable.CommandText := 'ALTER TABLE customer ADD  customer_num VARCHAR(20)  NULL';

 dmsw.adcupdatetable.Execute;

end;

 if not find_field(tname[i],'customer_memo') then

begin

 dmsw.adcupdatetable.CommandText := 'ALTER TABLE customer ADD  customer_memo VARCHAR(30)  NULL';

 dmsw.adcupdatetable.Execute;

end;

end;

end;

end;

 dmsw.ADCServer.CommitTrans;

EXCEPT

 dmsw.ADCServer.RollbackTrans;

END;

end;

 

三、数据库备份与恢复

应用数据库备份与恢复是数据安全性的重要保障,可以有多种方法实现该功能,SQL Server企业管理中具有数据库备份和还原操作的功能,数据库管理员可以通过后台完成数据库的维护。操作员也可以在客户端完成数据库的备份和恢复操作,这需要我们通过客户端程序来完成。下面介绍用Delphi 程序实现SQL Server数据库的备份和恢复功能,设计思路是用SQL Server的“Backup  Database”和“Restore Database”两个命令,在功能操作中建立两个线程来实现备份命令和恢复命令。

1.数据库备份

 


1 备份数据库窗体

备份窗体中可以让用户选择备份的目录,备份文件的格式可以这样定义:数据库名称+yyyy-mm-dd_hhnn,扩展名.dat。(如mydata2006-06-12_1405.Dat。)备份事件中按文件名生成备份命令串,并创建备份线程,在线程中执行备份命令。核心代码描述如下:

......

sqlstr := trim(Edit3.Text);  //备份文件名称

   try

     with dmsw.adqbaksql do begin

        close;

        sql.Clear;

        sql.Text := 'BACKUP DATABASE HL_SGMS '+'TO DISK='+''''+sqlstr+'''';

        Err:=false;

        esql:=true;

        bakthread := Tbakthread.Create(true);

        bakthread.Resume;

        while esql do application.ProcessMessages;

     if not Err then

       application.MessageBox(pchar('数据备份成功!'),'

备份',MB_ok+MB_ICONInformation)

     else

application.MessageBox(pchar('备份失败!'+chr(13)+ErrDes),'备份',MB_ok+MB_ICONwarning);

  end;

except

     on EOleException do begin

showmessage('操作失败,请确认当前没有对数据库进行添加删除数据操作!');

     end;

   else

   raise;

   end;

......

执行命令线程

procedure Tbakthread.Execute;

begin

  { Place thread code here }

  dmsw.adqbaksql.ExecSQL;

  if dmsw.adqbaksql.Connection.Errors.Count>0 then begin

  errdes:=dmsw.adqbaksql.Connection.Errors.Item[0].Get_Description;

  Err:=true; //调用备份窗口错误处理

  end;

  esql := false;

end;

2.数据库恢复

                        2 数据库恢复窗体

在恢复窗体中选择要恢复的备份文件名,执行数据库恢复命令,核心代码如下:

try

  if fileexists(trim(edit3.Text)) then begin  //要恢复的备份文件是否存在

  if application.MessageBox(pchar('恢复操作将会覆盖现有数据,请确认是否真的要进行恢复?)'+chr(13)+

`(恢复数据前请确保只有一个用户在使用当前软件)`),`恢复',MB_OKCancel+MB_ICONInformation)=idok then

  with dmsw.adqrestore do

 begin

  close;

  sql.Clear;

  sql.Add('use master');

  sql.Add('Restore Database hl_sgms'+' from disk='''+trim(edit3.Text)+''' with REPLACE');

  sql.Add('use hl_swms');

  Err:=false;

  Exec:=true;

  restoredata:=Trestoredata.Create(true);

  restoredata.Resume;

  while exec do application.ProcessMessages;

  if not Err then

  application.MessageBox(pchar('数据恢复成功!'),'恢复',MB_ok+MB_ICONInformation)

  else

  application.MessageBox(pchar('恢复失败!'+chr(13)+ErrDes),'恢复',MB_ok+MB_ICONwarning);

  end;

 end;

  panel1.BringToFront;

  except

  end;

执行命令线程

procedure Trestoredata.Execute;

begin

  { Place thread code here }

  try

  dmsw.adqrestore.ExecSQL;

  if dmsw.adqrestore.Connection.Errors.Count>0 then begin

  ErrDes:=dmsw.adqrestore.Connection.Errors.Item[0].Get_Description;

  Err:=true;

  end;

  finally

  Exec:=false;

  end;

end;

四、结语

数据库应用系统在使用过程中,客户端会提出新的需求,新增功能模块可能要求程序对后台数据库进行维护,包括新增业务表、修改数据表、新增存储过程、数据库备份和数据库恢复功能等。所以,掌握SQL Server常用的数据库维护命令是必要的。

顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
无法在这个位置找到: baidushare.htm
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
推荐知识