NonSoft

アクセスMDBのパスワードを変更するサンプル(VB.NET)


 サンプル(ソース/コード)
<このサンプルの概要>
System.Data.OleDbを使用しアクセスMDBのパスワードを変更するサンプル(VB.NET) です。

アクセスMDBのパスワードを変更するSQLは"ALTER DATABASE PASSWORD [NewPsw] [OldPsw]"です。
このSQLを実行するには排他モードでDBオープンする必要があるため、コネクション文字列に
"Mode=Share Exclusive;"を指定する必要があります。

ところで、、、
このサンプルではプロバイダとしてMicrosoft.Jet.OLEDB.4.0を使用していますが、
これはx86(32ビット)でのみ有効でx64(64ビット)では使用出来ません。
x64(64ビット)のパソコンでMicrosoft.Jet.OLEDB.4.0を使用するためには、
x86(32ビット)モードでコンパイルする必要があります。
x86(32ビット)モードでコンパイルするためには、[プロジェクト]の[プロパティ]で
[コンパイル]の[詳細コンパイルオプション]の[ターゲットCPU]を[x86]にします。

データベース関係のその他のサンプル(VB6/VB.NET/C#.NET)はこちらです。
データベース関係のその他のサンプル(VB6/VB.NET/C#.NET)

★クラス(Class1.vb)
Imports System.Data.OleDb

Public Class Class1
    ''' <summary>
    ''' ACCESS MDBファイルのパスワード変更
    ''' </summary>
    ''' <param name="mdbp">MDBファイルPATH</param>
    ''' <param name="oldp">旧パスワード</param>
    ''' <param name="newp">新パスワード</param>
    ''' <remarks></remarks>
    Public Shared Sub AccessMdbPasswd( _
        ByVal mdbp As String, ByVal oldp As String, ByVal newp As String)

        ' ACCESS MDB オープン
        Dim dbCon As OleDbConnection = New OleDbConnection()
        Dim cst As String = ""
        cst = cst & "Provider=Microsoft.Jet.OLEDB.4.0;"
        cst = cst & "Data Source=" & mdbp & ";"
        If oldp <> "" Then
            cst = cst & _
            "Jet OLEDB:Database Password=" & oldp & ";"
        End If
        cst = cst & "Mode=Share Exclusive;"
        dbCon.ConnectionString = cst
        dbCon.Open()

        ' 旧パスワード用のSQL生成
        If oldp = "" Then
            oldp = "NULL"
        Else
            oldp = "[" & oldp & "]"
        End If

        ' 新パスワード用のSQL生成
        If newp = "" Then
            newp = "NULL"
        Else
            newp = "[" & newp & "]"
        End If

        ' ACCESS MDB パスワード変更
        Dim sql As String = _
            "ALTER DATABASE PASSWORD " & newp & " " & oldp
        Dim dbCmd As OleDbCommand = New OleDbCommand(sql, dbCon)
        dbCmd.ExecuteNonQuery()

        ' ACCESS MDB クローズ
        dbCon.Close()
        dbCon.Dispose()
    End Sub
End Class

★フォームモジュール(Form1.vb)
Public Class Form1
    Private Sub Button1_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        ' パスワード(無し)→パスワード(abc)変更
        Class1.AccessMdbPasswd("D:\Temp\db1.mdb", "", "abc")

        ' パスワード(abc)→パスワード(123)変更
        Class1.AccessMdbPasswd("D:\Temp\db1.mdb", "abc", "123")

        ' パスワード(123)→パスワード(無し)変更
        Class1.AccessMdbPasswd("D:\Temp\db1.mdb", "123", "")
    End Sub
End Class