tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル パスワードがかかったAccessにiniファイルからのデータを持ってくるとエラー
投稿日: 2006/02/24(Fri) 07:28
投稿者とみぃだ
[OSのVer]:WindowsXPPRO    [VBのVer]:VB.NET2003  
[Access2002]
おはようございます。早速質問します。
iniファイルからmdbのパスワードを持ってきてVBからAccessへのデータの読み込みや更新を
しようとしています。

まずソースですが、
'指定のINIファイルから文字列を取得する
    <DllImport("KERNEL32.DLL", CharSet:=CharSet.Auto)> _
    Public Shared Function GetPrivateProfileString( _
        <MarshalAs(UnmanagedType.LPTStr)> ByVal lpAppName As String, _
        <MarshalAs(UnmanagedType.LPTStr)> ByVal lpKeyName As String, _
        <MarshalAs(UnmanagedType.LPTStr)> ByVal lpDefault As String, _
        <MarshalAs(UnmanagedType.LPTStr)> ByVal lpReturnedString As String, _
        ByVal nSize As Integer, _
        <MarshalAs(UnmanagedType.LPTStr)> ByVal iniFilename As String) As Integer
    End Function

    '指定のINIファイルの指定のキーの文字列を変更する
    <DllImport("KERNEL32.DLL", CharSet:=CharSet.Auto)> _
    Public Shared Function WritePrivateProfileString( _
        <MarshalAs(UnmanagedType.LPTStr)> ByVal lpApplicationName As String, _
        <MarshalAs(UnmanagedType.LPTStr)> ByVal lpKeyName As String, _
        <MarshalAs(UnmanagedType.LPTStr)> ByVal lpString As String, _
        <MarshalAs(UnmanagedType.LPTStr)> ByVal lpFileName As String) As Integer
    End Function

    '指定のINIファイルから整数値を取得する
    <DllImport("KERNEL32.DLL", CharSet:=CharSet.Auto)> _
    Public Shared Function GetPrivateProfileInt( _
        <MarshalAs(UnmanagedType.LPTStr)> ByVal lpApplicationName As String, _
        <MarshalAs(UnmanagedType.LPTStr)> ByVal lpKeyName As String, _
        ByVal nDefault As Integer, _
        <MarshalAs(UnmanagedType.LPTStr)> ByVal lpFileName As String) As Integer
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
        Dim oleCn = New OleDb.OleDbConnection
        Dim oleCmd As OleDb.OleDbCommand
        Dim oleReader As OleDb.OleDbDataReader
        Dim sql As String
        Dim a As Integer
        Dim b As String = "XXXXX"
        Dim c As String
        Dim iniFileName As String

        Dim DBPath As String
        Dim strBuffer As String = New String(CChar(" "), 256)
        Dim CnAccess As String


        iniFileName = "Setting.ini"
        'INI ファイルをプログラムと同じフォルダに置く場合
        'ルートディレクトリーかの判断
        Dim MyPath As String = Application.StartupPath
        If MyPath.EndsWith("\") = False Then
            MyPath &= "\"
        End If
        iniFileName = MyPath & iniFileName

        DBPath = Path.Combine(Application.StartupPath, "new.mdb")
        c = GetPrivateProfileString("database", "pass", "", _
                                         strBuffer, 256, iniFileName)
        c = strBuffer

        'コネクション文字列設定
        CnAccess = "Provider=Microsoft.Jet.OLEDB.4.0;"
        CnAccess &= "Data Source=" & DBPath & ";"

        'オプション
        CnAccess &= "Persist Security Info=True;"

        'データベースのパスワード
        '↓T 'System.ArgumentException' のハンドルされていない例外が system.data.dll で発
生しました。
        '追加情報 : 初期化文字列の形式が仕様に適合しません。インデックス 150 で始まっていま
す。

        CnAccess &= "Jet OLEDB:Database Password=" & CStr(c) & "
;"

        '  CnAccess &= "Jet OLEDB:Database Password=" & b & ";&q
uot; ・・・Uこちらはうまくいく

        Dim Cn As OleDbConnection
        Cn = New OleDbConnection(CnAccess)
        'コネクションのオープン・クローズ
        Try
            Cn.Open()
            sql = "SELECT * FROM Member"

            'レコード選択SQL文を作成してレコードを取得する
            oleCmd = New OleDb.OleDbCommand(sql, Cn)
            oleReader = oleCmd.ExecuteReader()

            'フィールドの数
            a = oleReader.FieldCount
            Cn.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
            Exit Sub
        End Try
        MsgBox(CStr(a))
    End Sub

exeと同じところにnew.mdb、setting.iniがあるんですけど、
Iをコメントを外すして起動後、ボタン1を押すと、
'System.ArgumentException' のハンドルされていない例外が system.data.dll で発生しました。
'追加情報 : 初期化文字列の形式が仕様に適合しません。インデックス 150 で始まっています。

とでます。
TをコメントアウトしてUをコメントを外すとうまくいきますが・・・

'追加情報 : 初期化文字列の形式が仕様に適合しません。インデックス 150 で始まっています。
の対策方法をどなたか教えてください。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。