纯编码实现Access数据库的建立或压缩

  1. <%   
  2. '#######以下是一个类文件,下面的注解是调用类的方法################################################   
  3. '# 注意:如果系统不支持建立Scripting.FileSystemObject对象,那么数据库压缩功能将无法使用   
  4. '# Access 数据库类   
  5. '# CreateDbFile 建立一个Access 数据库文件   
  6. '# CompactDatabase 压缩一个Access 数据库文件   
  7. '# 建立对象方法:   
  8. '# Set a = New DatabaseTools   
  9. '# by (萧寒雪) s.f.   
  10. '#########################################################################################   
  11.  
  12. Class DatabaseTools   
  13.  
  14.     Public function CreateDBfile(byVal dbFileName,byVal DbVer,byVal SavePath)   
  15.         '建立数据库文件   
  16.         'If DbVer is 0 Then Create Access97 dbFile   
  17.         'If DbVer is 1 Then Create Access2000 dbFile   
  18.         On error resume Next   
  19.         If Right(SavePath,1)<>"\" Or Right(SavePath,1)<>"/" Then SavePath = Trim(SavePath) & "\"   
  20.         If Left(dbFileName,1)="\" Or Left(dbFileName,1)="/" Then dbFileName = Trim(Mid(dbFileName,2,Len(dbFileName)))   
  21.         If DbExists(SavePath & dbFileName) Then   
  22.             Response.Write ("对不起,该数据库已经存在!")   
  23.             CreateDBfile = False   
  24.         Else   
  25.             Dim Ca   
  26.             Set Ca = Server.CreateObject("ADOX.Catalog")   
  27.             If Err.number<>0 Then   
  28.                 Response.Write ("无法建立,请检查错误信息  
  29.                 " & Err.number & " 
  30.                 " & Err.Description)   
  31.                 Err.Clear   
  32.                 Exit function   
  33.             End If   
  34.             If DbVer=0 Then   
  35.                 call Ca.Create("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & SavePath & dbFileName)   
  36.             Else   
  37.                 call Ca.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & SavePath & dbFileName)   
  38.             End If   
  39.             Set Ca = Nothing   
  40.             CreateDBfile = True   
  41.         End If   
  42.     End function   
  43.  
  44.     Public function CompactDatabase(byVal dbFileName,byVal DbVer,byVal SavePath)   
  45.         '压缩数据库文件   
  46.         '0 为access 97   
  47.         '1 为access 2000   
  48.         On Error resume next   
  49.         If Right(SavePath,1)<>"\" Or Right(SavePath,1)<>"/" Then SavePath = Trim(SavePath) & "\"   
  50.         If Left(dbFileName,1)="\" Or Left(dbFileName,1)="/" Then dbFileName = Trim(Mid(dbFileName,2,Len(dbFileName)))   
  51.         If DbExists(SavePath & dbFileName) Then   
  52.             Response.Write ("对不起,该数据库已经存在!")   
  53.             CompactDatabase = False   
  54.         Else   
  55.             Dim Cd   
  56.             Set Cd =Server.CreateObject("JRO.JetEngine")   
  57.             If Err.number<>0 Then   
  58.                 Response.Write ("无法压缩,请检查错误信息  
  59.                 " & Err.number & " 
  60.                 " & Err.Description)   
  61.                 Err.Clear   
  62.                 Exit function   
  63.             End If   
  64.             If DbVer=0 Then   
  65.                 call Cd.CompactDatabase("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & SavePath & dbFileName,"Provider=Microsoft.Jet.OLEDB.3.51;Data   
  66.                 Source=" & SavePath & dbFileName & ".bak.mdb;Jet OLEDB;Encrypt Database=True")   
  67.             Else   
  68.                 call Cd.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &   
  69.                 SavePath & dbFileName,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &   
  70.                 SavePath & dbFileName & ".bak.mdb;Jet OLEDB;Encrypt Database=True")   
  71.             End If   
  72.             '删除旧的数据库文件   
  73.             call DeleteFile(SavePath & dbFileName)   
  74.             '将压缩后的数据库文件还原   
  75.             call RenameFile(SavePath & dbFileName & ".bak.mdb",SavePath & dbFileName)   
  76.             Set Cd = False   
  77.             CompactDatabase = True   
  78.         End If   
  79.     end function   
  80.  
  81.     Public function DbExists(byVal dbPath)   
  82.         '查找数据库文件是否存在   
  83.         On Error resume Next   
  84.         Dim c   
  85.         Set c = Server.CreateObject("ADODB.Connection")   
  86.         c.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath   
  87.         If Err.number<>0 Then   
  88.             Err.Clear   
  89.             DbExists = false   
  90.         else   
  91.             DbExists = True   
  92.         End If   
  93.         set c = nothing   
  94.     End function   
  95.  
  96.     Public function AppPath()   
  97.         '取当前真实路径   
  98.         AppPath = Server.MapPath("./")   
  99.     End function   
  100.  
  101.     Public function AppName()   
  102.         '取当前程序名称   
  103.         AppName = Mid(Request.ServerVariables("SCRIPT_NAME"),(InStrRev(Request.ServerVariables("SCRIPT_NAME") ,"/",-1,1))+1,Len(Request.ServerVariables("SCRIPT_NAME")))   
  104.     End Function   
  105.  
  106.     Public function DeleteFile(filespec)   
  107.         '删除一个文件   
  108.         Dim fso   
  109.         Set fso = CreateObject("Scripting.FileSystemObject")   
  110.         If Err.number<>0 Then   
  111.         Response.Write("删除文件发生错误!请查看错误信息  
  112.         " & Err.number & " 
  113.         " & Err.Description)   
  114.         Err.Clear   
  115.         DeleteFile = False   
  116.         End If   
  117.         call fso.DeleteFile(filespec)   
  118.         Set fso = Nothing   
  119.         DeleteFile = True   
  120.     End function   
  121.  
  122.     Public function RenameFile(filespec1,filespec2)   
  123.         '修改一个文件   
  124.         Dim fso   
  125.         Set fso = CreateObject("Scripting.FileSystemObject")   
  126.         If Err.number<>0 Then   
  127.         Response.Write("修改文件名时发生错误!请查看错误信息  
  128.         " & Err.number & " 
  129.         " & Err.Description)   
  130.         Err.Clear   
  131.         RenameFile = False   
  132.         End If   
  133.         call fso.CopyFile(filespec1,filespec2,True)   
  134.         call fso.DeleteFile(filespec1)   
  135.         Set fso = Nothing   
  136.         RenameFile = True   
  137.     End function   
  138.  
  139. End Class   
  140. %>   
  141.  
  142.  现在已可以压缩有密码的数据库,代码如下,但是压缩之后的数据库密码就没有了!如何解决?  
  143.  
  144. <%  
  145. Const JET_3X = 4  
  146.  
  147. Function CompactDB(dbPath, boolIs97)  
  148.     Dim fso, Engine, strDBPath  
  149.     strDBPath = left(dbPath,instrrev(DBPath,"\"))  
  150.     Set fso = CreateObject("Scripting.FileSystemObject")  
  151.  
  152.     If fso.FileExists(dbPath) Then      
  153.         Set Engine = CreateObject("JRO.JetEngine")  
  154.  
  155.         If boolIs97 = "True" Then 
  156.             Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath, _  
  157.             "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password='XXXXXXXX';Data Source=" & strDBPath & "temp.mdb;" _  
  158.             & "Jet OLEDB:Engine Type=" & JET_3X  
  159.         Else 
  160.         Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password='XXXXXXXX';Data Source=" & dbpath, _  
  161.         "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp.mdb" 
  162.         End If 
  163.  
  164.         fso.CopyFile strDBPath & "temp.mdb",dbpath  
  165.         fso.DeleteFile(strDBPath & "temp.mdb")  
  166.         Set fso = nothing  
  167.         Set Engine = nothing  
  168.  
  169.         CompactDB = "你的数据库, " & dbpath & ", 已经压缩成功!" & vbCrLf  
  170.  
  171.     Else 
  172.         CompactDB = "数据库名称或路径不正确. 请重试!" & vbCrLf  
  173.     End If 
  174.  
  175. End Function 
  176. %>  

本日志由 flyinweb 于 2009-06-19 22:07:59 发表到 WEB应用开发 中,目前已经被浏览 402 次,评论 0 次;

作者添加了以下标签: Access创建压缩