純編碼實現Access數據庫的建立或壓縮
<% '#######以下是一個類文件,下面的注解是調用類的方法################################################ '# 注意:如果系統不支持建立Scripting.FileSystemObject對象,那么數據庫壓縮功能將無法使用 '# Access 數據庫類 '# CreateDbFile 建立一個Access 數據庫文件 '# CompactDatabase 壓縮一個Access 數據庫文件 '# 建立對象方法: '# Set a = New DatabaseTools '# by (蕭寒雪) s.f. '#########################################################################################
Class DatabaseTools
Public function CreateDBfile(byVal dbFileName,byVal DbVer,byVal SavePath) '建立數據庫文件 'If DbVer is 0 Then Create Access97 dbFile 'If DbVer is 1 Then Create Access2000 dbFile On error resume Next If Right(SavePath,1)<>"\" Or Right(SavePath,1)<>"/" Then SavePath = Trim(SavePath) & "\" If Left(dbFileName,1)="\" Or Left(dbFileName,1)="/" Then dbFileName = Trim(Mid(dbFileName,2,Len(dbFileName))) If DbExists(SavePath & dbFileName) Then Response.Write ("對不起,該數據庫已經存在!") CreateDBfile = False Else Dim Ca Set Ca = Server.CreateObject("ADOX.Catalog") If Err.number<>0 Then Response.Write ("無法建立,請檢查錯誤信息 " & Err.number & " " & Err.Description) Err.Clear Exit function End If If DbVer=0 Then call Ca.Create("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & SavePath & dbFileName) Else call Ca.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & SavePath & dbFileName) End If Set Ca = Nothing CreateDBfile = True End If End function
Public function CompactDatabase(byVal dbFileName,byVal DbVer,byVal SavePath) '壓縮數據庫文件 '0 為access 97 '1 為access 2000 On Error resume next If Right(SavePath,1)<>"\" Or Right(SavePath,1)<>"/" Then SavePath = Trim(SavePath) & "\" If Left(dbFileName,1)="\" Or Left(dbFileName,1)="/" Then dbFileName = Trim(Mid(dbFileName,2,Len(dbFileName))) If DbExists(SavePath & dbFileName) Then Response.Write ("對不起,該數據庫已經存在!") CompactDatabase = False Else Dim Cd Set Cd =Server.CreateObject("JRO.JetEngine") If Err.number<>0 Then Response.Write ("無法壓縮,請檢查錯誤信息 " & Err.number & " " & Err.Description) Err.Clear Exit function End If If DbVer=0 Then call Cd.CompactDatabase("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & SavePath & dbFileName,"Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & SavePath & dbFileName & ".bak.mdb;Jet OLEDB;Encrypt Database=True") Else call Cd.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & SavePath & dbFileName,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & SavePath & dbFileName & ".bak.mdb;Jet OLEDB;Encrypt Database=True") End If '刪除舊的數據庫文件 call DeleteFile(SavePath & dbFileName) '將壓縮后的數據庫文件還原 call RenameFile(SavePath & dbFileName & ".bak.mdb",SavePath & dbFileName) Set Cd = False CompactDatabase = True End If end function
Public function DbExists(byVal dbPath) '查找數據庫文件是否存在 On Error resume Next Dim c Set c = Server.CreateObject("ADODB.Connection") c.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath If Err.number<>0 Then Err.Clear DbExists = false else DbExists = True End If set c = nothing End function
Public function AppPath() '取當前真實路徑 AppPath = Server.MapPath("./") End function
Public function AppName() '取當前程序名稱 AppName = Mid(Request.ServerVariables("SCRIPT_NAME"),(InStrRev(Request.ServerVariables("SCRIPT_NAME") ,"/",-1,1))+1,Len(Request.ServerVariables("SCRIPT_NAME"))) End Function
Public function DeleteFile(filespec) '刪除一個文件 Dim fso Set fso = CreateObject("Scripting.FileSystemObject") If Err.number<>0 Then Response.Write("刪除文件發生錯誤!請查看錯誤信息 " & Err.number & " " & Err.Description) Err.Clear DeleteFile = False End If call fso.DeleteFile(filespec) Set fso = Nothing DeleteFile = True End function
Public function RenameFile(filespec1,filespec2) '修改一個文件 Dim fso Set fso = CreateObject("Scripting.FileSystemObject") If Err.number<>0 Then Response.Write("修改文件名時發生錯誤!請查看錯誤信息 " & Err.number & " " & Err.Description) Err.Clear RenameFile = False End If call fso.CopyFile(filespec1,filespec2,True) call fso.DeleteFile(filespec1) Set fso = Nothing RenameFile = True End function
End Class %>
現在已可以壓縮有密碼的數據庫,代碼如下,但是壓縮之后的數據庫密碼就沒有了!如何解決?
<% Const JET_3X = 4
Function CompactDB(dbPath, boolIs97) Dim fso, Engine, strDBPath strDBPath = left(dbPath,instrrev(DBPath,"\")) Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(dbPath) Then Set Engine = CreateObject("JRO.JetEngine")
If boolIs97 = "True" Then Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath, _ "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password='XXXXXXXX';Data Source=" & strDBPath & "temp.mdb;" _ & "Jet OLEDB:Engine Type=" & JET_3X Else Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password='XXXXXXXX';Data Source=" & dbpath, _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp.mdb" End If
fso.CopyFile strDBPath & "temp.mdb",dbpath fso.DeleteFile(strDBPath & "temp.mdb") Set fso = nothing Set Engine = nothing
CompactDB = "你的數據庫, " & dbpath & ", 已經壓縮成功!" & vbCrLf
Else CompactDB = "數據庫名稱或路徑不正確. 請重試!" & vbCrLf End If
End Function %>
接著來,希望大家也參與近來 ------------------------------- asp編程有用的例子(二) 17. ASP與SQL數據庫連接:
<%@ language=VBs cript%> <% dim conn set conn=server.createobject("ADODB.connection") con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服務器名稱或IP地址;UID=sa;PWD=數據庫密碼;DATABASE=數據庫名稱 %>
建立記錄集對象:
set rs=server.createobject("adodb.recordset") rs.open SQL語句,conn,3,2
18. SQL常用命令使用方法:
(1) 數據記錄篩選:
sql="select * from 數據表 where 字段名=字段值 order by 字段名 [desc]"
sql="select * from 數據表 where 字段名 like '%字段值%' order by 字段名 [desc]"
sql="select top 10 * from 數據表 where 字段名 order by 字段名 [desc]"
sql="select * from 數據表 where 字段名 in ('值1','值2','值3')"
sql="select * from 數據表 where 字段名 between 值1 and 值2"
(2) 更新數據記錄:
sql="update 數據表 set 字段名=字段值 where 條件表達式"
sql="update 數據表 set 字段1=值1,字段2=值2 …… 字段n=值n where 條件表達式"
(3) 刪除數據記錄:
sql="delete from 數據表 where 條件表達式"
sql="delete from 數據表" (將數據表所有記錄刪除)
(4) 添加數據記錄:
sql="insert into 數據表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"
sql="insert into 目標數據表 select * from 源數據表" (把源數據表的記錄添加到目標數據表)
(5) 數據記錄統計函數:
AVG(字段名) 得出一個表格欄平均值 COUNT(*|字段名) 對數據行數的統計或對某一欄有值的數據行數統計 MAX(字段名) 取得一個表格欄最大的值 MIN(字段名) 取得一個表格欄最小的值 SUM(字段名) 把數據欄的值相加
引用以上函數的方法:
sql="select sum(字段名) as 別名 from 數據表 where 條件表達式" set rs=conn.excute(sql)
用 rs("別名") 獲取統的計值,其它函數運用同上。
(5) 數據表的建立和刪除:
CREATE TABLE 數據表名稱(字段1 類型1(長度),字段2 類型2(長度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 數據表名稱 (永久性刪除一個數據表)
19. 記錄集對象的方法:
rs.movenext 將記錄指針從當前的位置向下移一行 rs.moveprevious 將記錄指針從當前的位置向上移一行 rs.movefirst 將記錄指針移到數據表第一行 rs.movelast 將記錄指針移到數據表最后一行 rs.absoluteposition=N 將記錄指針移到數據表第N行 rs.absolutepage=N 將記錄指針移到第N頁的第一行 rs.pagesize=N 設置每頁為N條記錄 rs.pagecount 根據 pagesize 的設置返回總頁數 rs.recordcount 返回記錄總數 rs.bof 返回記錄指針是否超出數據表首端,true表示是,false為否 rs.eof 返回記錄指針是否超出數據表末端,true表示是,false為否 rs.delete 刪除當前記錄,但記錄指針不會向下移動 rs.addnew 添加記錄到數據表末端 rs.update 更新數據表記錄
---------------------------------------
20 Recordset對象方法
Open方法
recordset.Open Source,ActiveConnection,CursorType,LockType,Options
Source Recordset對象可以通過Source屬性來連接Command對象。Source參數可以是一個Command對象名稱、一段SQL命令、一個指定的數據表名稱或是一個Stored Procedure。假如省略這個參數,系統則采用Recordset對象的Source屬性。
ActiveConnection Recordset對象可以通過ActiveConnection屬性來連接Connection對象。這里的ActiveConnection可以是一個Connection對象或是一串包含數據庫連接信息(ConnectionString)的字符串參數。
CursorType Recordset對象Open方法的CursorType參數表示將以什么樣的游標類型啟動數據,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下: -------------------------------------------------------------- 常數 常數值 說明 ------------------------------------------------------------- adOpenForwardOnly 0 缺省值,啟動一個只能向前移動的游標(Forward Only)。 adOpenKeyset 1 啟動一個Keyset類型的游標。 adOpenDynamic 2 啟動一個Dynamic類型的游標。 adOpenStatic 3 啟動一個Static類型的游標。 ------------------------------------------------------------- 以上幾個游標類型將直接影響到Recordset對象所有的屬性和方法,以下列表說明他們之間的區別。
------------------------------------------------------------- Recordset屬性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic ------------------------------------------------------------- AbsolutePage 不支持 不支持 可讀寫 可讀寫 AbsolutePosition 不支持 不支持 可讀寫 可讀寫 ActiveConnection 可讀寫 可讀寫 可讀寫 可讀寫 BOF 只讀 只讀 只讀 只讀 Bookmark 不支持 不支持 可讀寫 可讀寫 CacheSize 可讀寫 可讀寫 可讀寫 可讀寫 CursorLocation 可讀寫 可讀寫 可讀寫 可讀寫 CursorType 可讀寫 可讀寫 可讀寫 可讀寫 EditMode 只讀 只讀 只讀 只讀 EOF 只讀 只讀 只讀 只讀 Filter 可讀寫 可讀寫 可讀寫 可讀寫 LockType 可讀寫 可讀寫 可讀寫 可讀寫 MarshalOptions 可讀寫 可讀寫 可讀寫 可讀寫 MaxRecords 可讀寫 可讀寫 可讀寫 可讀寫 PageCount 不支持 不支持 只讀 只讀 PageSize 可讀寫 可讀寫 可讀寫 可讀寫 RecordCount 不支持 不支持 只讀 只讀 Source 可讀寫 可讀寫 可讀寫 可讀寫 State 只讀 只讀 只讀 只讀 Status 只讀 只讀 只讀 只讀 AddNew 支持 支持 支持 支持 CancelBatch 支持 支持 支持 支持 CancelUpdate 支持 支持 支持 支持 Clone 不支持 不支持 Close 支持 支持 支持 支持 Delete 支持 支持 支持 支持 GetRows 支持 支持 支持 支持 Move 不支持 支持 支持 支持 MoveFirst 支持 支持 支持 支持 MoveLast 不支持 支持 支持 支持 MoveNext 支持 支持 支持 支持 MovePrevious 不支持 支持 支持 支持 NextRecordset 支持 支持 支持 支持 Open 支持 支持 支持 支持 Requery 支持 支持 支持 支持 Resync 不支持 不支持 支持 支持 Supports 支持 支持 支持 支持 Update 支持 支持 支持 支持 UpdateBatch 支持 支持 支持 支持 -------------------------------------------------------------- 其中NextRecordset方法并不適用于Microsoft Access數據庫。
LockType Recordset對象Open方法的LockType參數表示要采用的Lock類型,如果忽略這個參數,那么系統會以Recordset對象的LockType屬性為預設值。LockType參數包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:
------------------------------------------------------------- 常數 常數值 說明 -------------------------------------------------------------- adLockReadOnly 1 缺省值,Recordset對象以只讀方式啟動,無法運行AddNew、Update及Delete等方法 adLockPrssimistic 2 當數據源正在更新時,系統會暫時鎖住其他用戶的動作,以保持數據一致性。 adLockOptimistic 3 當數據源正在更新時,系統并不會鎖住其他用戶的動作,其他用戶可以對數據進行增、刪、改的操作。 adLockBatchOptimistic 4 當數據源正在更新時,其他用戶必須將CursorLocation屬性改為adUdeClientBatch才能對數據進行增、 刪、改的操作。
|