一种便宜的SQL Server数据库备份机制
作者:翁春华 来源:计算机世界日报 添加时间:2006-5-21 11:00:38---- 开发所需软件:VB 5.0,Access 97
---- 备份程序的设计方法:
---- 一.用控制面版的ODBC设置,给SQL Server中的数据库添加一个数据源名称。
---- 二.在Access中新建一个数据库,命名为backup.mdb。
---- 三.用VB定义两个主要过程:Attach_Table() 和Create_Table() 。
---- Attach_Table的作用是将SQL Server数据库中的所有需要备份的表链接到Access数据库中,(注意不是拷贝,链接仅提供对该表的临时访问,其效率要远远高于拷贝)。在此过程中要排除系统表,因为那是SQL Server自创建的,里面无用户数据。Create_Table的作用是在backup.mdb中创建目的表,即创建在这个备份Access库中的表用来保存所有存与SQL中的用户数据。另外,在链接过程中,要去掉SQL Server自带的拥有者名称(是隐含的,用户看不见),还定义了一个过程StripOwner()。
---- 四.程序的逻辑结构:
通过第一步创建的ODBC数据源打开要备份的SQL数据库
使用Attach_Table() 将该数据库中的所有用户表链接到backup.mdb中
使用Create_Table() 对每个表创建与之对应的备份表,取名可遵循如下原则,若原表叫table_name,则备份表叫b_table_name。
将table_name表中的所有记录添加到b_table_name中。
删除对SQL数据表的链接。
---- 五.程序原码如下:
//链接表的过程:a是表名,b是SQL数据库连接字符串。
例如:b= "odbc;uid=sa;pwd=;dsn=thcg;database=thcw_cg"
a="danwei"
Private Function AttachTable
(a As String, b As String) As Boolean
Dim td As TableDef
Dim i
On Error GoTo e:
'先判断里头是否已有表
For i = 0 To backup_db.TableDefs.count - 1
If backup_db.TableDefs(i).name = a Then
AttachTable = True
Exit Function
End If
Next i
Set td = backup_db.CreateTableDef(a)
td.Connect = b
td.SourceTableName = a
backup_db.TableDefs.Append td
AttachTable = True
Exit Function
e:
MsgBox Err.Description, vbInformation, p_title
AttachTable = False
Exit Function
End Function
//创建新表的过程
Private Sub Create_Table(a As String) '
在Access库中创建欲备份的目的表:b_xxxx
Dim i
Dim tblTableDefObj As TableDef
Dim fldFieldObj As Field
Dim indIndexObj As Index
Dim tdf As TableDef
Dim fld As Field
Dim idx As Index
Dim str As String
Dim source As String
'创建表
Set tblTableDefObj = backup_db.CreateTableDef()
str = Trim(a)
source = Mid(str, 3)
tblTableDefObj.name = StripOwner(str)
'创建字段
For i = 0 To backup_db.TableDefs(source).
Fields.count - 1
Set fld = backup_db.TableDefs(source).Fields(i)
Set fldFieldObj = backup_db.TableDefs
(source).CreateField(fld.name, fld.Type, fld.Size)
tblTableDefObj.Fields.Append fldFieldObj
Next
'追加新表
backup_db.TableDefs.Append tblTableDefObj
End Sub
//去除隐含名称的过程
SQL给表加的隐含拥有者一般为"dbo."
并加在头部,这里用"."来截取拥有者字符串。
Function StripOwner(rsTblName As String) As String
If InStr(rsTblName, ".") > 0 Then
rsTblName = Mid(rsTblName, InStr(rsTblName, ".")
+ 1, Len(rsTblName))
End If
StripOwner = rsTblName
End Function
由于拷贝记录是VB对数据库的常规操作,这里不再赘述。
---- 如果要从Access数据库中将数据恢复到SQL Server中,方法类似,仅仅是拷贝记录的方向反一下,从Access表往链接过来的SQL表中拷贝。
站内搜索