タイトル | : パスワードがかかったAccessにiniファイルからのデータを持ってくるとエラー |
記事No | : 3173 |
投稿日 | : 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 で始まっています。 の対策方法をどなたか教えてください。
|