タイトル : パスワードがかかった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 で始まっています。 の対策方法をどなたか教えてください。 |