读写ini的四个函数
'文件名SourceDB.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
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文件,固定节点setting,in_key为写入/读取的主键
'仅仅针对是非值
'Y:yes,N:no,E:error
Public Function GetIniTF(ByVal In_Key As String) As Boolean
On Error GoTo GetIniTFErr
GetIniTF = True
Dim GetStr As String
GetStr = VBA.String(128, 0)
GetPrivateProfileString "Setting", In_Key, "", GetStr, 256, App.Path & "\SourceDB.ini"
GetStr = VBA.Replace(GetStr, VBA.Chr(0), "")
If GetStr = "1" Then
   GetIniTF = True
   GetStr = ""
Else
   GoTo GetIniTFErr
End If
Exit Function
GetIniTFErr:
   Err.Clear
   GetIniTF = False
   GetStr = ""
End FunctionPublic Function WriteIniTF(ByVal In_Key As String, ByVal In_Data As Boolean) As Boolean
On Error GoTo WriteIniTFErr
WriteIniTF = True
If In_Data = True Then
 WritePrivateProfileString "Setting", In_Key, "1", App.Path & "\SourceDB.ini"
Else
 WritePrivateProfileString "Setting", In_Key, "0", App.Path & "\SourceDB.ini"
End If
Exit Function
WriteIniTFErr:
   Err.Clear
   WriteIniTF = False
End Function
'以下两个函数,读/写ini文件,不固定节点,in_key为写入/读取的主键
'针对字符串值
'空值表示出错
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 & "\SourceDB.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 FunctionPublic Function WriteIniStr(ByVal AppName As String, ByVal In_Key As String, ByVal In_Data As String) As Boolean
On Error GoTo WriteIniStrErr
WriteIniStr = True
If VBA.Trim(In_Data) = "" Or VBA.Trim(In_Key) = "" Or VBA.Trim(AppName) = "" Then
   GoTo WriteIniStrErr
Else
 WritePrivateProfileString AppName, In_Key, In_Data, App.Path & "\SourceDB.ini"
End If
Exit Function
WriteIniStrErr:
   Err.Clear
   WriteIniStr = False
End Function

解决方案 »

  1.   

    '参数值说明
    'Parameter Values
    'Here is some terminology you will need to remember when dealing with INI files.'AppName - Heading of the section in an INI file.
    'KeyName - Key within a heading.
    'Value - Value either being set or retrieved.Public Declare Function WritePrivateProfileString Lib "Kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpfilename As String) As LongPublic 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 LongPublic Declare Function GetProfileInt Lib "Kernel32" Alias "GetProfileIntA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal nDefault As Long) As LongPublic Declare Function GetProfileString Lib "Kernel32" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long) As LongPublic Declare Function WriteProfileString Lib "Kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As LongPublic Declare Function GetPrivateProfileInt Lib "Kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpfilename As String) As Long'读整数值
    '例子
    'Dim iMyValue As Integer
    'iMyValue = GetPrivateProfileInt("足彩大赢家", "投注期号", App.Path & "\dyj.ini", 0)Public Function iReadINI(sAppName As String, sKeyName As String, sFileName As String, iDefault As Integer) As Integer
      iReadINI = GetPrivateProfileInt(sAppName, ByVal sKeyName, iDefault, sFileName)
    End Function'读字符串值
    '例子
    'Dim sMyValue As String
    'sMyValue = sReadINI("足彩大赢家", "投注期号", App.Path & "\dyj.ini")Public Function sReadINI(sAppName As String, sKeyName As String, sFileName As String) As String
      Dim sReturn As String
      sReturn = String(255, Chr(0))
      sReadINI = Left(sReturn, GetPrivateProfileString(sAppName, ByVal sKeyName, "", sReturn, Len(sReturn), sFileName))
    End Function'写入 INI 文件
    '例子
    'WriteINI "足彩大赢家", "投注期号", Combo4.Text, App.Path & "\dyj.ini"Public Sub WriteINI(sAppName As String, sKeyName As String, sNewString As String, sFileName As String)
      Dim R As Integer
      R = WritePrivateProfileString(sAppName, sKeyName, sNewString, sFileName)
    End Sub'----------------------------------------------------------
    '删除键值
    '例子
    'RemoveKeyName "VBTT", "Download Directory", App.Path & "\VBTT.INI"'Public Sub RemoveKeyName(sAppName As String, sKey As String, sFileName As String)
    '  Dim R As Integer
    '  R = RemovePrivateProfileString(sAppName, sKey, 0&, sFileName)
    'End Sub'删除程序名段落
    '例子
    'RemoveAppNameSection "VBTT", App.Path & "\VBTT.INI"
    'Public Sub RemoveAppNameSection(sAppName As String, sFileName As String)
    '  Dim R As Integer
    '  R = RemovePrivateProfileString(sAppName, 0&, 0&, sFileName)
    'End Sub
      

  2.   

    以上代码来自Http://Shawls.Yeah.Net
      

  3.   

    为 了 方 便 用 户 使 用 和 使 系 统 具 有 灵 活 性, 大 多 数 Win-dows 应 用 程 序 将 用 户 所 做 的 选 择 以 及 各 种 变 化 的 系 统 信 息 记 录 在 初 始 化 (INI) 文 件 中。 因 此, 当 系 统 的 环 境 发 生 变 化 时, 可 以 直 接 修 改 INI 文 件, 而 无 需 修 改 程 序。 由 此 可 见, INI 文 件 对 系 统 功 能 是 至 关 重 要 的。 本 文 将 介 绍 采 用 Visual Basic for Windows(下 称 VB) 开 发 Windows 应 用 程 序 时 如 何 读 写 INI 文 件。 INI 文 件 是 文 本 文 件, 由 若 干 部 分 (section) 组 成, 在 每 个 带 括 号 的 标 题 下 面, 是 若 干 个 以 单 个 单 词 开 头 的 关 键 词 (keyword) 和 一 个 等 号, 每 个 关 键 词 会 控 制 应 用 程 序 某 个 功 能 的 工 作 方 式, 等 号 右 边 的 值 (value) 指 定 关 键 词 的 操 作 方 式。 其 一 般 形 式 如 下 :[section1]
    keyword1=valuel
    keyword2=value2
    … …
    [section2]
    keyword1=value1
    keyword2=value2
    … …其 中, 如 果 等 号 右 边 无 任 何 内 容 (即 value 为 空), 那 就 表 示 Windows 应 用 程 序 已 为 该 关 键 词 指 定 了 缺 省 值, 如 果 在 整 个 文 件 中 找 不 到 某 个 关 键 词 (或 整 个 一 部 分), 那 同 样 表 示 为 它 们 指 定 了 缺 省 值。 各 个 部 分 所 出 现 的 顺 序 是 无 关 紧 要 的, 在 每 一 个 部 分 里, 各 个 关 键 词 的 顺 序 同 样 也 无 关 紧 要。 读 写 INI 文 件 通 常 有 两 种 方 式 : 一 是 在 Windows 中 用 “记 事 本” (Notepad) 对 其 进 行 编 辑, 比 较 简 单, 无 需 赘 述; 二 是 由 Windows 应 用 程 序 读 写 INI 文 件, 通 常 是 应 用 程 序 运 行 时 读 取 INI 文 件 中 的 信 息, 退 出 应 用 程 序 时 保 存 用 户 对 运 行 环 境 的 某 些 修 改。 关 键 词 的 值 的 类 型 多 为 字 符 串 或 整 数 型, 应 分 两 种 情 况 读 写。 为 了 使 程 序 具 有 可 维 护 性 和 可 移 植 性, 最 好 把 对 INI 文 件 的 读 写 封 装 在 一 个 模 块 (RWINI.BAS) 中, 在 RWI-NI.BAS 中 构 造 GetIniS 和 GetIniN 函 数 以 及 SetIniS 和 Se-tIniN 过 程, 在 这 些 函 数 和 过 程 中 需 要 使 用 WindowsAPI 的 “GetPrivateprofileString”、 “GetPrivateProfileInt” 和 “WritePrivateProfileString” 函 数。 RWINI.BAS 模 块 的 程 序 代 码 如 下 :在 General-Declearation 部 分 中 声 明 使 用 到 的 Windows API 函 数 :Declare Function GetprivateprofileString Lib “Ker-nel” (ByVal lpAppName As String,
    ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpRetrm-StringAs
    String, ByVal cbReturnString As Integer, ByVal Filename As String) As Integer
    Declare Function GetPrivatePfileInt Lib “Kernel” (ByVal lpAppName As String,
    ByVal lpKeyName As String, ByVal lpDefault As Integer, ByVal Filename As String) As
    Integer
    Declare Funciton WritePrivateprofileString Lib “Kernel” (ByVal lpApplicationName
    As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lplFileName
    As String) As Integer
    Function GetIniS(ByVal SectionName As String, ByVal KeyWord As String, ByValDefString
    As String) As String
    Dim ResultString As String *144, Temp As Integer
    Dim s As String, i As Integer
    Temp%=GetPrivateProfileString(SectionName, KeyWord, “”, ResultString, 144, AppProfileName())
    ‘检 索 关 键 词 的 值
    If Temp%> 0 Then ‘关 键 词 的 值 不 为 空
    s=“”
    For i=1 To 144
    If Asc(Mid$(ResultString, i, 1)) =0 Then
    Exit For
    Else
    s=s & Mid$(ResultString, i, 1)
    End If
    Next
    Else
    Temp%=WritePrivateProfilesString(sectionname, KeyWord, DefString, ppProfileName())
    ‘将 缺 省 值 写 入 INI 文 件
    s=DefString
    End If
    GetIniS=s
    End Function
    Function GetIniN(ByVal SectionName As String, ByVal KeyWord As String, ByValDefValue
    As Ineger) As Integer
    Dim d As Long, s As String
    d=DefValue
    GetIniN=GetPrivate ProfileInt(SectionName,
    KeyWord, DefValue, ppProfileName())
    If d <> DefValue Then
    s=“” &d
    d=WritePrivateProfileString(SectionName,
    KeyWord, s, AppProfileName())
    End If
    End Function
    Sub SetIniS(ByVal SectionName As String, BtVa KeyWord As String, ByVal ValStr
    As String)
    Dim res%
    res%=WritePrivateprofileString(SectionName, KeyWord, ValStr, AppProfileName())
    End Sub
    Sub SetIniN(ByVal SectionName As String, ByVal KeyWord As String, ByVal ValInt
    As Integer)
    Dim res%, s$
    s$=Str$(ValInt)
    res%=WriteprivateProfileString(SectionName, KeyWord, s$, AppProfileName())
    End SubSectionName 为 每 一 部 分 的 标 题, KeyWord 为 关 键 词, GetIniS 和 GetIniN 中 的 DefValue 为 关 键 词 的 缺 省 值, SetIniS 和 SetIniN 的 ValStr 和 ValInt 为 要 写 入 INI 文 件 的 关 键 词 的 值。 为 了 能 更 好 地 说 明 如 何 使 用 以 上 函 数 和 过 程, 下 面 举 两 个 实 例。 实 例 1:开 发 应 用 程 序 通 常 要 使 用 数 据 库 和 其 它 一 些 文 件, 这 些 文 件 的 目 录 (包 括 路 径 和 文 件 名) 不 应 在 程 序 中 固 定, 而 是 保 存 在 INI 文 件 中, 程 序 运 行 时 由 INI 文 件 中 读 入。 读 入 数 据 库 文 件 的 代 码 如 下 :Dim Databasename As String
    Databasename=GetIniS(“数 据 库”, “职 工”, “”)
    If DatabaseName=“” Then DatabaseName=InputBox(“请 输 入 数 据 库 《职 工》 的 目 录”),
    App.Title)’ 也 可 通 过 “文 件 对 话 框” 进 行 选 择
    On Error Resume Next
    Set db=OpenDatabas(DatabaseName)
    If Err <> 0 Then
    MsgBox“打 开 数 据 库 失 败 !”, MB-
    ICONSTOP, App.Title:Goto ErrorProcessing
    Else
    SetIniS“数 据 库”, “职 工”, DatabaseName
    End If
    On Error GoTo 0
    … …实 例 2:为 了 方 便 用 户 操 作, 有 时 需 要 保 存 用 户 界 面 的 某 些 信 息, 例 如 窗 口 的 高 度 和 宽 度 等。 装 载 窗 体 时, 从 INI 文 件 中 读 入 窗 体 高 度 和 宽 度, 卸 载 窗 体 时 将 窗 体 当 前 高 度 和 宽 度 存 入 INI 文 件, 代 码 如 下 :Sub Form1_Load()
    … …
    Forml.Height=GetIniN(“窗 体 1”, “高 度”, 6000)
    Form1.Width=GetIniN(“窗 体 1”, “高 度”, 4500)
    End Sub
    … …
    Sub Form1_Unload()
    … …
    SetIniN“窗 体 1”, “高 度”, Me.Height
    SetIniN“窗 体 1,” 宽 度 “, Me.Width
    … …
      

  4.   

    给你一个现成的完整例子吧!1、ServerHost.INI(c:\ini\ServerHost.INI)
    ;******************************************************************************
    ; ServerHost.INI
    ;******************************************************************************
    [SYSTEM]
    Version=Version 1.00
    Date=2002/03/05[ServerINI]
    Provider=SQLOLEDB.1
    User ID=User-xxx
    Password=Psw_xxx
    Persist Security Info=False
    Initial Catalog=xxx_MIS
    Data Source=xxx-SERVER2、程序部分(cls文件):
    Option Explicit'' 声明 API 函数
    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _
        "GetPrivateProfileStringA" (ByVal lpAppName As String, _
        ByVal lpKeyName As String, ByVal lpDefault As String, _
        ByVal lpReturnedString As String, ByVal nSize As Long, _
        ByVal lpFileName As String) As LongPrivate Const BUFF_SIZE = 512               '' 最大字符数(读取字符时用)
    '' File 1
    Private Function APIGetPrivateProfileString( _
        ByVal lpAppName As String, _
        ByVal lpKeyName As String, _
        ByVal lpFileName As String, _
        Optional ByVal lpDefault As String = "", _
        Optional ByVal bFlag As Boolean = True _
    ) As StringOn Error GoTo ErrorProcess
        
        Dim szBuff  As String * BUFF_SIZE
        Dim nRet    As Integer    '' 调用 API 函数取得相应字段
        nRet = GetPrivateProfileString(lpAppName, lpKeyName, lpDefault & Chr$(0), szBuff, _
            BUFF_SIZE, lpFileName)
        
        '' 调用程序段,转换成可识别的符号
        APIGetPrivateProfileString = IIf(bFlag, cBinToStr(szBuff), szBuff)
        
        '' 正常退出
        Exit Function
        
    ErrorProcess:
        APIGetPrivateProfileString = ""
        Exit Function
    End Function
    '' 将特殊格式转换成可识别的符号
    Private Function cBinToStr( _
        ByVal szString As String _
    ) As StringOn Error GoTo ErrorProcess
        
        Dim nPos As Integer
        Dim strString As String    nPos = InStr(szString, Chr$(0))
        If nPos <> 0 Then
            strString = Mid$(szString, 1, nPos - 1)
        Else
            strString = ""
        End If
        
        cBinToStr = strString
        
        Exit Function
        
    ErrorProcess:
        cBinToStr = ""
        Exit FunctionEnd Function
    '' 初始化部分参数
    Private Sub Class_Initialize()
        Dim strFilePath     As String
        'Dim iNum            As Integer
        Dim strBuff         As String
        
        Dim strProvider     As String
        Dim strUserID       As String
        Dim strPSW          As String
        Dim strPerSecInf    As String
        Dim strInitCatalog  As String
        Dim strDataSrc      As String
        
        Dim strTmp As String
        
        G_ADO_ConStr = ""
            
        'strFilePath = "..\ini\ServerHost.INI"
        'strFilePath = "ini\ServerHost.INI"
        strFilePath = "C:\ini\ServerHost.INI"
        
        If strFilePath = "" Then Exit Sub
        
        strProvider = APIGetPrivateProfileString("ServerINI", "Provider", strFilePath, True)
        strUserID = APIGetPrivateProfileString("ServerINI", "User ID", strFilePath, True)
        strPSW = APIGetPrivateProfileString("ServerINI", "Password", strFilePath, "", True)
        strPerSecInf = APIGetPrivateProfileString("ServerINI", "Persist Security Info", strFilePath, "", True)
        strInitCatalog = APIGetPrivateProfileString("ServerINI", "Initial Catalog", strFilePath, "", True)
        strDataSrc = APIGetPrivateProfileString("ServerINI", "Data Source", strFilePath, "", True)
        
        strTmp = "Provider = " & strProvider & ";"
        strTmp = strTmp & "User ID = " & strUserID & ";"
        strTmp = strTmp & "Password = " & strPSW & ";"
        strTmp = strTmp & "Persist Security Info = " & strPerSecInf & ";"
        strTmp = strTmp & "Initial Catalog = " & strInitCatalog & ";"
        strTmp = strTmp & "Data Source = " & strDataSrc
        
    '    strTmp = "Provider = " & "SQLOLEDB.1" & ";"
    '    strTmp = strTmp & "User ID = " & "bclhr" & ";"
    '    strTmp = strTmp & "Password = " & "BclHr1234" & ";"
    '    strTmp = strTmp & "Persist Security Info = " & "False" & ";"
    '    strTmp = strTmp & "Initial Catalog = " & "HR_MIS" & ";"
    '    strTmp = strTmp & "Data Source = " & "HR-SERVER"
        '"Provider=SQLOLEDB.1;User ID=bclhr;Password=BclHr1234;Persist Security Info=False;Initial Catalog=HR_MIS;Data Source=HR-SERVER"    G_ADO_ConStr = strTmpEnd SubPublic Function getStrAdo() As String
        getStrAdo = G_ADO_ConStr
    End Function