Link to home
Start Free TrialLog in
Avatar of trevorm
trevorm

asked on

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.
ASKER CERTIFIED SOLUTION
Avatar of waty
waty
Flag of Belgium image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of anthonyc
anthonyc

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