转帖 读写INI文件模块Option Explicit '读写INI文件模块 Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal AppName As String, ByVal KeyName As String, ByVal keydefault As String, ByVal Filename As String) As LongPublic Function myReadINI(iniFileName, iniSection, iniKey, iniDefault) '该函数的使用与读注册表类似 'inifilename为INI文件名,inisection为INI文件中的项目,inikey为项目下的键名称,inidefault为默认键值 'If no section (appname), default is first appname '(若无项目名,默认为初始名称) 'if no key, default is first key '(若无键名,默认为初始键名) Dim lpApplicationName As String Dim lpKeyName As String Dim lpDefault As String Dim lpReturnedString As String Dim nSize As Long Dim lpFileName As String Dim retval As Long Dim Filename As String '判断INI文件是否存在 If Dir(iniFileName) <> "" Then lpDefault = Space$(254) lpDefault = iniDefault lpReturnedString = Space$(254) nSize = 254 lpFileName = iniFileName lpApplicationName = iniSection lpKeyName = iniKey Filename = lpFileName retval = GetPrivateProfileString(lpApplicationName, lpKeyName, lpDefault, lpReturnedString, nSize, lpFileName) myReadINI = lpReturnedString End If End FunctionPublic Function myWriteINI(iniFileName As String, iniSection As String, iniKey As String, Info As String) As String '该函数的使用与写注册表类似,可在INI文件中添加或修改项、键、值 'iniFileName为INI文件名,inisection为INI文件中的项目,inikey为项目下的键名称,Info为键值 Dim retval As Long retval = WritePrivateProfileString(iniSection, iniKey, Info, iniFileName) myWriteINI = LTrim$(Str$(retval)) End FunctionPublic Sub DelSectionINI(iniFileName As String, iniSection As String) '该过程可删除INI文件中指定的项 'iniFileName为INI文件名,iniSection为指定的项 '判断INI文件是否存在 If Dir(iniFileName) <> "" Then WritePrivateProfileString iniSection, vbNullString, vbNullString, iniFileName End If
End SubPublic Sub DelKeyINI(iniFileName As String, iniSection As String, iniKey As String) '该过程可删除INI文件中指定的键 'iniFileName为INI文件名,iniSection为指定的项,iniKey为指定的键 '判断INI文件是否存在 If Dir(iniFileName) <> "" Then WritePrivateProfileString iniSection, iniKey, vbNullString, iniFileName End If End SubPublic Sub DelValueINI(iniFileName As String, iniSection As String, iniKey As String) '该过程可删除INI文件中指定键的值 'iniFileName为INI文件名,iniSection为指定的项,iniKey为指定的键 '判断INI文件是否存在 If Dir(iniFileName) <> "" Then WritePrivateProfileString iniSection, iniKey, "", iniFileName End If End SubPublic Sub DelFileINI(iniFileName As String) '该过程可删除INI文件 'iniFileName为INI文件名 '判断INI文件是否存在 If Dir(iniFileName) <> "" Then Kill iniFileName End If End Sub
妳所说的数据库连接字符串, 只是某小节中的一个关键字, 读取其键值可以参考以下函数:Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Public Function GetIniStr(ByVal AppName As String, ByVal In_Key As String) As String On Error GoTo GetIniStrErr If VBA.Trim(In_Key) = "" Then GoTo GetIniStrErr End If Dim GetStr As String GetStr = VBA.String(128, 0) GetPrivateProfileString AppName, In_Key, "", GetStr, 256, App.Path & "\DB.ini" GetStr = VBA.Replace(GetStr, VBA.Chr(0), "") If GetStr = "" Then GoTo GetIniStrErr Else GetIniStr = GetStr GetStr = "" End If Exit Function GetIniStrErr: Err.Clear GetIniStr = "" GetStr = "" End Function
太麻煩了,告你一個好辦法,用.udl文件來連最方便了! QQ:439609487
'写ini Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long '读ini Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long '写入ini中的servername Public Sub set_com_num(ByVal vNewValue As String) WritePrivateProfileString "com", "servername", vNewValue, App.Path & "\sample.ini" End Sub '获得ini中的servername Public Function Get_com_num() As String Dim strTemp As String * 255 Dim n As Long n = GetPrivateProfileString("com", "servername", "", strTemp, Len(strTemp), App.Path & "\sample.ini") Get_com_num = Left(strTemp, n) End Function '写入ini中的databasename Public Sub set_com_name(ByVal vNewValue As String) WritePrivateProfileString "com", "databasename", vNewValue, App.Path & "\sample.ini" End Sub '获得ini中的databasename Public Function Get_com_name() As String Dim strTemp As String * 255 Dim n As Long n = GetPrivateProfileString("com", "databasename", "", strTemp, Len(strTemp), App.Path & "\sample.ini") Get_com_name = Left(strTemp, n) End Function '设置ini中的username Public Sub set_readcount1(ByVal vNewValue As String) Debug.Print vNewValue WritePrivateProfileString "com", "username", vNewValue, App.Path & "\sample.ini" End Sub '获得ini中的username Public Function Get_readcount1() As String Dim strTemp As String * 255 Dim n As Long n = GetPrivateProfileString("com", "username", "", strTemp, Len(strTemp), App.Path & "\sample.ini") Get_readcount1 = Left(strTemp, n) End Function '设置ini中的password Public Sub set_readcount2(ByVal vNewValue As String) WritePrivateProfileString "com", "password", vNewValue, App.Path & "\sample.ini" End Sub '获得ini中的password Public Function Get_readcount2() As String Dim strTemp As String * 255 Dim n As Long n = GetPrivateProfileString("com", "password", "", strTemp, Len(strTemp), App.Path & "\sample.ini") Get_readcount2 = Left(strTemp, n) End Function
在我看来你可以先建ini文件(空),然后用VB写如连接的变量,再读取。
不同哦写ini Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long '读ini Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long '写入ini中的servername Public Sub set_com_num(ByVal vNewValue As String) WritePrivateProfileString "com", "servername", vNewValue, App.Path & "\sample.ini" End Sub '获得ini中的servername Public Function Get_com_num() As String Dim strTemp As String * 255 Dim n As Long n = GetPrivateProfileString("com", "servername", "", strTemp, Len(strTemp), App.Path & "\sample.ini") Get_com_num = Left(strTemp, n) End Function '写入ini中的databasename Public Sub set_com_name(ByVal vNewValue As String) WritePrivateProfileString "com", "databasename", vNewValue, App.Path & "\sample.ini" End Sub '获得ini中的databasename Public Function Get_com_name() As String Dim strTemp As String * 255 Dim n As Long n = GetPrivateProfileString("com", "databasename", "", strTemp, Len(strTemp), App.Path & "\sample.ini") Get_com_name = Left(strTemp, n) End Function '设置ini中的username Public Sub set_readcount1(ByVal vNewValue As String) Debug.Print vNewValue WritePrivateProfileString "com", "username", vNewValue, App.Path & "\sample.ini" End Sub '获得ini中的username Public Function Get_readcount1() As String Dim strTemp As String * 255 Dim n As Long n = GetPrivateProfileString("com", "username", "", strTemp, Len(strTemp), App.Path & "\sample.ini") Get_readcount1 = Left(strTemp, n) End Function '设置ini中的password Public Sub set_readcount2(ByVal vNewValue As String) WritePrivateProfileString "com", "password", vNewValue, App.Path & "\sample.ini" End Sub '获得ini中的password Public Function Get_readcount2() As String Dim strTemp As String * 255 Dim n As Long n = GetPrivateProfileString("com", "password", "", strTemp, Len(strTemp), App.Path & "\sample.ini") Get_readcount2 = Left(strTemp, n) End Function
读写INI文件模块Option Explicit
'读写INI文件模块
Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal AppName As String, ByVal KeyName As String, ByVal keydefault As String, ByVal Filename As String) As LongPublic Function myReadINI(iniFileName, iniSection, iniKey, iniDefault)
'该函数的使用与读注册表类似
'inifilename为INI文件名,inisection为INI文件中的项目,inikey为项目下的键名称,inidefault为默认键值
'If no section (appname), default is first appname
'(若无项目名,默认为初始名称)
'if no key, default is first key
'(若无键名,默认为初始键名)
Dim lpApplicationName As String
Dim lpKeyName As String
Dim lpDefault As String
Dim lpReturnedString As String
Dim nSize As Long
Dim lpFileName As String
Dim retval As Long
Dim Filename As String
'判断INI文件是否存在
If Dir(iniFileName) <> "" Then
lpDefault = Space$(254)
lpDefault = iniDefault
lpReturnedString = Space$(254)
nSize = 254
lpFileName = iniFileName
lpApplicationName = iniSection
lpKeyName = iniKey
Filename = lpFileName
retval = GetPrivateProfileString(lpApplicationName, lpKeyName, lpDefault, lpReturnedString, nSize, lpFileName)
myReadINI = lpReturnedString
End If
End FunctionPublic Function myWriteINI(iniFileName As String, iniSection As String, iniKey As String, Info As String) As String
'该函数的使用与写注册表类似,可在INI文件中添加或修改项、键、值
'iniFileName为INI文件名,inisection为INI文件中的项目,inikey为项目下的键名称,Info为键值
Dim retval As Long
retval = WritePrivateProfileString(iniSection, iniKey, Info, iniFileName)
myWriteINI = LTrim$(Str$(retval))
End FunctionPublic Sub DelSectionINI(iniFileName As String, iniSection As String)
'该过程可删除INI文件中指定的项
'iniFileName为INI文件名,iniSection为指定的项
'判断INI文件是否存在
If Dir(iniFileName) <> "" Then
WritePrivateProfileString iniSection, vbNullString, vbNullString, iniFileName
End If
End SubPublic Sub DelKeyINI(iniFileName As String, iniSection As String, iniKey As String)
'该过程可删除INI文件中指定的键
'iniFileName为INI文件名,iniSection为指定的项,iniKey为指定的键
'判断INI文件是否存在
If Dir(iniFileName) <> "" Then
WritePrivateProfileString iniSection, iniKey, vbNullString, iniFileName
End If
End SubPublic Sub DelValueINI(iniFileName As String, iniSection As String, iniKey As String)
'该过程可删除INI文件中指定键的值
'iniFileName为INI文件名,iniSection为指定的项,iniKey为指定的键
'判断INI文件是否存在
If Dir(iniFileName) <> "" Then
WritePrivateProfileString iniSection, iniKey, "", iniFileName
End If
End SubPublic Sub DelFileINI(iniFileName As String)
'该过程可删除INI文件
'iniFileName为INI文件名
'判断INI文件是否存在
If Dir(iniFileName) <> "" Then
Kill iniFileName
End If
End Sub
"driver={SQL Server};server=ww;UID=sa;PWD=;database=dd"
;注释
[小节名]
关键字=值
……
可以有多个小节
只是某小节中的一个关键字,
读取其键值可以参考以下函数:Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Public Function GetIniStr(ByVal AppName As String, ByVal In_Key As String) As String
On Error GoTo GetIniStrErr
If VBA.Trim(In_Key) = "" Then
GoTo GetIniStrErr
End If
Dim GetStr As String
GetStr = VBA.String(128, 0)
GetPrivateProfileString AppName, In_Key, "", GetStr, 256, App.Path & "\DB.ini"
GetStr = VBA.Replace(GetStr, VBA.Chr(0), "")
If GetStr = "" Then
GoTo GetIniStrErr
Else
GetIniStr = GetStr
GetStr = ""
End If
Exit Function
GetIniStrErr:
Err.Clear
GetIniStr = ""
GetStr = ""
End Function
QQ:439609487
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
'读ini
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
'写入ini中的servername
Public Sub set_com_num(ByVal vNewValue As String)
WritePrivateProfileString "com", "servername", vNewValue, App.Path & "\sample.ini"
End Sub
'获得ini中的servername
Public Function Get_com_num() As String
Dim strTemp As String * 255
Dim n As Long
n = GetPrivateProfileString("com", "servername", "", strTemp, Len(strTemp), App.Path & "\sample.ini")
Get_com_num = Left(strTemp, n)
End Function
'写入ini中的databasename
Public Sub set_com_name(ByVal vNewValue As String)
WritePrivateProfileString "com", "databasename", vNewValue, App.Path & "\sample.ini"
End Sub
'获得ini中的databasename
Public Function Get_com_name() As String
Dim strTemp As String * 255
Dim n As Long
n = GetPrivateProfileString("com", "databasename", "", strTemp, Len(strTemp), App.Path & "\sample.ini")
Get_com_name = Left(strTemp, n)
End Function
'设置ini中的username
Public Sub set_readcount1(ByVal vNewValue As String)
Debug.Print vNewValue
WritePrivateProfileString "com", "username", vNewValue, App.Path & "\sample.ini"
End Sub
'获得ini中的username
Public Function Get_readcount1() As String
Dim strTemp As String * 255
Dim n As Long
n = GetPrivateProfileString("com", "username", "", strTemp, Len(strTemp), App.Path & "\sample.ini")
Get_readcount1 = Left(strTemp, n)
End Function
'设置ini中的password
Public Sub set_readcount2(ByVal vNewValue As String)
WritePrivateProfileString "com", "password", vNewValue, App.Path & "\sample.ini"
End Sub
'获得ini中的password
Public Function Get_readcount2() As String
Dim strTemp As String * 255
Dim n As Long
n = GetPrivateProfileString("com", "password", "", strTemp, Len(strTemp), App.Path & "\sample.ini")
Get_readcount2 = Left(strTemp, n)
End Function
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
'读ini
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
'写入ini中的servername
Public Sub set_com_num(ByVal vNewValue As String)
WritePrivateProfileString "com", "servername", vNewValue, App.Path & "\sample.ini"
End Sub
'获得ini中的servername
Public Function Get_com_num() As String
Dim strTemp As String * 255
Dim n As Long
n = GetPrivateProfileString("com", "servername", "", strTemp, Len(strTemp), App.Path & "\sample.ini")
Get_com_num = Left(strTemp, n)
End Function
'写入ini中的databasename
Public Sub set_com_name(ByVal vNewValue As String)
WritePrivateProfileString "com", "databasename", vNewValue, App.Path & "\sample.ini"
End Sub
'获得ini中的databasename
Public Function Get_com_name() As String
Dim strTemp As String * 255
Dim n As Long
n = GetPrivateProfileString("com", "databasename", "", strTemp, Len(strTemp), App.Path & "\sample.ini")
Get_com_name = Left(strTemp, n)
End Function
'设置ini中的username
Public Sub set_readcount1(ByVal vNewValue As String)
Debug.Print vNewValue
WritePrivateProfileString "com", "username", vNewValue, App.Path & "\sample.ini"
End Sub
'获得ini中的username
Public Function Get_readcount1() As String
Dim strTemp As String * 255
Dim n As Long
n = GetPrivateProfileString("com", "username", "", strTemp, Len(strTemp), App.Path & "\sample.ini")
Get_readcount1 = Left(strTemp, n)
End Function
'设置ini中的password
Public Sub set_readcount2(ByVal vNewValue As String)
WritePrivateProfileString "com", "password", vNewValue, App.Path & "\sample.ini"
End Sub
'获得ini中的password
Public Function Get_readcount2() As String
Dim strTemp As String * 255
Dim n As Long
n = GetPrivateProfileString("com", "password", "", strTemp, Len(strTemp), App.Path & "\sample.ini")
Get_readcount2 = Left(strTemp, n)
End Function