INI Files - Storing & Retrieving Info

I want to store the path of a database in the INI file of a program.
What is the best way to Create an entry in an INI file to store the database path. What is the best way to then retrieve this from the INI file.
trevormAsked:
Who is Participating?
 
watyConnect With a Mentor Commented:
Here is the way on how to handle INI File

gsTemp = GetPrivateProfileString("Directories", "Temp", "c:\temp", gsIniFile)


Option Explicit

'---------------------------------------------------------------
'-INI API Declarations...
'---------------------------------------------------------------
Declare Function OSGetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long
Declare Function OSGetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Declare Function OSGetPrivateProfileString 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

Declare Function OSWritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
Declare Function OSWritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

Declare Function OSGetProfileInt Lib "kernel32" Alias "GetProfileIntA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal nDefault As Long) As Long
Declare Function OSGetProfileSection Lib "kernel32" Alias "GetProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long
Declare Function OSGetProfileString 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 Long

Declare Function OSWriteProfileSection Lib "kernel32" Alias "WriteProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String) As Long
Declare Function OSWriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long

Private Const nBUFSIZEINI = 1024
Private Const nBUFSIZEINIALL = 4096

Public Function GetPrivateProfileString(ByVal szSection As String, ByVal szEntry As Variant, ByVal szDefault As String, ByVal szFileName As String) As String
   ' *** Get an entry in the inifile ***
   
   Dim szTmp                     As String
   Dim nRet                      As Long
   
   If (IsNull(szEntry)) Then
       ' *** Get names of all entries in the named Section ***
      szTmp = String$(nBUFSIZEINIALL, 0)
      nRet = OSGetPrivateProfileString(szSection, 0&, szDefault, szTmp, nBUFSIZEINIALL, szFileName)
   Else
       ' *** Get the value of the named Entry ***
      szTmp = String$(nBUFSIZEINI, 0)
      nRet = OSGetPrivateProfileString(szSection, CStr(szEntry), szDefault, szTmp, nBUFSIZEINI, szFileName)
   End If
   GetPrivateProfileString = Left$(szTmp, nRet)
   
End Function

Public Sub WritePrivateProfile(ByVal szSection As String, ByVal szEntry As Variant, ByVal vValue As Variant, ByVal szFileName As String)
   ' *** Write an szEntry in the inifile ***
   
   Dim nRet                      As Long

   If (IsNull(szEntry)) Then
      ' *** Delete the section ***
      nRet = OSWritePrivateProfileString(szSection, 0&, 0&, szFileName)
   ElseIf (IsNull(vValue)) Then
      ' *** Delete the entry in the section ***
      nRet = OSWritePrivateProfileString(szSection, CStr(szEntry), 0&, szFileName)
   Else
      ' *** Insert or replace the Entry ***
      nRet = OSWritePrivateProfileString(szSection, CStr(szEntry), CStr(vValue), szFileName)
   End If
   
End Sub

Public Function GetProfileString(ByVal szSection As String, ByVal szEntry As Variant, ByVal szDefault As String) As String
   ' *** Get an entry in the WIN inifile ***
   
   Dim szTmp                    As String
   Dim nRet                     As Long

   If (IsNull(szEntry)) Then
       ' *** Get names of all entries in the named Section ***
       szTmp = String$(nBUFSIZEINIALL, 0)
       nRet = OSGetProfileString(szSection, 0&, szDefault, szTmp, nBUFSIZEINIALL)
   Else
       ' *** Get the value of the named Entry ***
       szTmp = String$(nBUFSIZEINI, 0)
       nRet = OSGetProfileString(szSection, CStr(szEntry), szDefault, szTmp, nBUFSIZEINI)
   End If
   GetProfileString = Left$(szTmp, nRet)
   
End Function


Sub WriteProfile(ByVal szSection As String, ByVal szEntry As Variant, ByVal vValue As Variant)
   ' *** Write an szEntry in the WIN inifile ***
   
   Dim nRet                      As Long
   
   If (IsNull(szEntry)) Then
      ' *** Delete the section ***
       nRet = OSWriteProfileString(szSection, 0&, 0&)
   ElseIf (IsNull(vValue)) Then
      ' *** Delete the entry in the section ***
       nRet = OSWriteProfileString(szSection, CStr(szEntry), 0&)
   Else
      ' *** Insert or replace the Entry ***
       nRet = OSWriteProfileString(szSection, CStr(szEntry), CStr(vValue))
   End If
   
End Sub



0
 
anthonycCommented:
The best way (only way in vb5) is to use GetPrivateProfileString and WritePrivateProfileString API.  Here are functions that use them, and make it a little easier:

Option Explicit

#If Win16 Then
    Private Declare Function GetPrivateProfileInt Lib "Kernel" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Integer, ByVal lpFileName As String) As Integer
    Private Declare Function GetPrivateProfileString Lib "Kernel" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
    Private Declare Function WritePrivateProfileString Lib "Kernel" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lplFileName As String) As Integer
#Else
    Private 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
    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
#End If

Public Function ReadINI_Integer(szAppName As String, szKeyname As String, szININame As String, Optional varDefault) As Integer
    Dim iResult As Integer
    iResult = GetPrivateProfileInt(szAppName, szKeyname, IIf(IsMissing(varDefault), 0, CInt(varDefault)), szININame)
   
    ReadINI_Integer = iResult
End Function

Public Function ReadINI_String(szAppName As String, szKeyname As String, szININame As String, Optional varDefault) As String
    Const c_iLargest As Integer = 255
   
    Dim szReturn      As String
    Dim iSizeReturn   As Integer
    Dim szDefault     As String
   
    If IsMissing(varDefault) Then
        szDefault = ""
    Else
        szDefault = CStr(varDefault)
    End If
   
    szReturn = Space$(c_iLargest)
       
    'Read from the INI File
    iSizeReturn = GetPrivateProfileString(szAppName, szKeyname, szDefault, szReturn, c_iLargest, szININame)
   
    'trim Read value and removed NULL
    szReturn = Trim$(Left$(szReturn, iSizeReturn))
   
    ReadINI_String = szReturn
End Function

Public Function WriteINI(szAppName As String, szKeyname As String, szValue As String, szININame As String)
    WriteINI = WritePrivateProfileString(szAppName, szKeyname, szValue, szININame)
End Function


Here are example functions on how to use them.  These functions read/write the window coordinates:

Public Sub GetWindowPosition(frmCur As Form, szINIFile As String)
    Dim iLeft   As Integer
    Dim iTop    As Integer
    Dim iHeight As Integer
    Dim iWidth  As Integer
   
    iLeft = ReadINI_Integer(frmCur.Name, "Left", szINIFile)
    If iLeft > 0 Then
        frmCur.Left = iLeft
    End If
   
    iTop = ReadINI_Integer(frmCur.Name, "Top", szINIFile)
    If iTop > 0 Then
        frmCur.Top = iTop
    End If
   
    iHeight = ReadINI_Integer(frmCur.Name, "Height", szINIFile)
    If iHeight > 0 Then
        frmCur.Height = iHeight
    End If
   
    iWidth = ReadINI_Integer(frmCur.Name, "Width", szINIFile)
    If iWidth > 0 Then
        frmCur.Width = iWidth
    End If
End Sub




Public Sub SaveWindowPosition(frmCur As Form, szINIFile As String)
    WriteINI frmCur.Name, "Left", frmCur.Left, szINIFile
    WriteINI frmCur.Name, "Top", frmCur.Top, szINIFile
    WriteINI frmCur.Name, "Width", frmCur.Width, szINIFile
    WriteINI frmCur.Name, "Height", frmCur.Height, szINIFile
End Sub


0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.