筆者在開發"涼山州林業局"天然林資源保護綜合管理系統中,需要為程序建立Sql Server數據庫的運行環境。為了方便用戶,筆者開發了這個數據庫配置工具。完成在SQL Server數據庫中建立設備,建立數據庫,建立表格,分配權限的功能,"涼山州林業局"系統中的所有數據庫配置操作都可以通過這個小工具完成。方便了數據庫應用程序所需Sql Server環境的建立,根本不用啟動SQL Enterprise Manager配置數據庫。
---- 這個小工具由VB開發,利用ADO 訪問數據庫,實現更改數據庫結構,其他語言也可以此作為參考。啟動VB6.0,新建一個工程,在菜單-工程-引用裡選"Microsoft ActiveX Data Objects 2.0 Library",代碼裡需要有
dim conn As New ADODB.Connection 定義ADO數據庫對象 conn.ConnectionString = "driver={SQL Server};" & _ "server=" & ServerName & ";uid=" & UserName & "; pwd=" & Password & ";database=" & DatabaseName & "" 連接數據串 conn.open 連接數據庫---- 注:ServerName為服務器名;UserName為用戶名;Password為用戶口令; DatabaseName要登錄的數據庫名,可以為空。
---- 核心代碼如下:
初始化設備語法: DISK INIT NAME="device_name",PHYNAME= "physical_name",VDEVNO=device_number, SIZE=numberofblock---- 說明:這裡,NAME是數據庫設備名(一個有效的標識符),PHYNAME(數據庫設備的物理名)是原始的磁盤分區UNIX或外設(vms)名,或者是操作系統的文件名。VDEVNO時數據庫的設備標識號,合法值為1-255,SIZE的單位是2KB的塊,例如1MB(1024KB)時SIZE值為512。
---- 建立數據庫語法:CREATE DATABASE database_name [ON database_device]
---- 說明:database me是要建的數據庫名,database_device是設備名
---- 要新建立一個數據庫,就需要設備名,數據庫名,物理名和設備號。具體步驟如下:
---- 我們假設用戶要新建立設備dbName,在設備dbName上建立數據庫dbName。
---- 1)得到設備名。dbName是用戶給出的設備名;先查詢系統表sysdevices,看用戶給出的設備名dbName是否已經存在,如果此設備名存在,就需要更換一個設備名,因為設備名是唯一的。
sql = "select * from sysdevices where name=" & dbName & "" Set rs = conn.Execute(sql) If Not rs.EOF Then MsgBox "設備名"" & dbName & "" 已存在!", 16, "請重新輸入名稱" Exit Sub End If---- 2)得到數據庫名。dbName是用戶給出的數據庫名;查詢系統表sysdatabases,看用戶給出的數據庫名dbName是否已經存在,如果此數據庫存在,就需要更換一個數據庫名,像設備名一樣,數據庫名也是唯一的
sql = "select * from sysdatabases where name=" & dbName & "" Set rs = conn.Execute(sql) 下面代碼略---- 3)得到PHYNAME物理名。查詢服務器上數據庫文件的物理位置serverpath,典型的,我們可以從系統表sysdevices中查詢master(這是SQL Server的主庫名)數據庫的位置,例如G:MSSQLDATAMASTER.DAT,則我們的數據庫可以建在"G:MSSQLDATA"目錄下。
sql = "select name,phyname from sysdevices " low/16777216為設備號 Set rs = conn.Execute(sql) 然後遍歷記錄對象rs,當name="master"時,取出phyname, 從而可以得到物理位置serverpath =G:MSSQLDATA。---- 4)得到一個空閒的設備號vdevno。設備號合法值1~255,遍歷這些號,查找出未被使用的空閒設備號,下面程序得到已有的設備號
sql = "select distinct low/16777216 from sysdevices order by low/16777216" low/16777216為設備號---- 5)建立數據庫。所需的信息都准備完畢,可以建立數據庫了(注:下面的"" & Chr(34) & ""就是一個"""雙引號,這樣處理後,才能滿足語法要求;數據庫為20M,則dbSize=512*20)
sql = "DISK INIT NAME=" & Chr(34) & "" & dbName & "" & Chr(34) & ",PHYSNAME=" & Chr(34) & "" & serverpath & "" & dbName & ".dat" & Chr(34) & ",VDEVNO=" & vdevno & ",SIZE=" & dbSize & "" Set rs = conn.Execute(sql) 初始化設備 sql = "CREATE DATABASE " & dbName & " on " & dbName & "=" & dbSize & "" 注: 第一個dbName是數據庫名, 第二個dbName是設備名 Set rs = conn.Execute(sql) 在設備dbName上建立數據庫dbName MsgBox "數據庫"" & dbName & ""建在服務器上 "" & serverpath & "" & dbName & ".dat", 建立成功!", 64, "成功"
CREATE TABLE table_name (field_name data_type [NOT NULL|NULL],…)---- 說明:table_name為新建的表名,field_name為字段名,data_type為數據類型。
(注意下面的fileid int IDENTITY字段自動計數, datetime NOT NULL DEFAULT(GETDATE())字段每當入 庫時有個缺省值,由數據庫生成當時的時間)。 sql = "CREATE TABLE " & TableName & " (fileid int IDENTITY, filetime datetime NOT NULL DEFAULT(GETDATE()),fileimage image NULL )" conn.Execute sql 建立表格
---- 1)建立用戶的登錄賬號