|
▼ようたん さん:
おはようございます。
確認はしていませんが
(いや、作成した時には何度も確認したはずですが、投稿前にはしてない)、
以下のコードで作動すると思います。
「Microsoft Jet and Replication Objects 2.6 Library」に参照設定を行います。
標準モジュールに
'=========================================================
Sub test()
Dim ret As Long
ret = chg_pass_mdb("D:\My Documents\db1.mdb", "db1", "db1")
If ret = 0 Then
MsgBox "ok"
Else
MsgBox Error(ret)
End If
End Sub
'======================================
Function chg_pass_mdb(ByVal dbpath, o_pdw, n_pdw, Optional tmpstr = "tmp.mdw") As Long
' 機能 指定されたMDBファイルの最適化及び、パスワード変更を行う
' IN dbpath 最適化及び、パスワード変更を行うMDBファイルのフルネーム
' o_pdw 変更前のパスワード パスワードが元々ない場合は o_pdw=""とする
' n_pdw 変更後のパスワード パスワードなしの場合は、 n_pdw=""とする
' tmpstr 省略可能 最適化及び、パスワード変更処理に使われるテンポファイル名
' 指定されたMDBファイルdbpathと同じフォルダ上に一時的に作成される
'
' OUT chg_pass_mdb 0--正常終了 その他----異常終了
On Error Resume Next
Dim je As JRO.JetEngine
Dim getmypath As String
chg_pass_mdb = 0
getmypath = CreateObject("Scripting.FileSystemObject").GetParentFolderName(dbpath)
If Dir(getmypath & "\" & tmpstr) <> "" Then
Kill getmypath & "\" & tmpstr
If Err.Number <> 0 Then
chg_pass_mdb = Err.Number
Exit Function
End If
End If
Set je = New JRO.JetEngine
je.CompactDatabase "Data Source=" & dbpath & ";Jet OLEDB:Database Password=" & o_pdw, _
"Data Source=" & getmypath & "\" & tmpstr & ";" & _
"Jet OLEDB:Database Password=" & n_pdw
If Err.Number <> 0 Then
chg_pass_mdb = Err.Number
Else
Kill dbpath
Name getmypath & "\" & tmpstr As dbpath
End If
Set je = Nothing
End Function
試してみてください。
|
|