' 打开ini文件 FNum = FreeFile Open App.Path & "\Vending.INI" For Binary As #FNum SystemConfig = Space(LOF(FNum)) Get #FNum, , SystemConfig Close #FNumPublic Function FindSetup(SetupStr As String) As String Dim Positions As String, Positione As String FindSetup = "" Positions = InStr(SystemConfig, SetupStr) If Positions = 0 Then Exit Function
Positions = Positions + Len(SetupStr) + 1 Positione = InStr(Positions, SystemConfig, ";") - Positions FindSetup = Mid(SystemConfig, Positions, Positione) End FunctionPublic Sub ChangeSetup(SetupStr As String, SetupText As String) Dim Positions As Integer, Positione As Integer Dim LeftStr As String, RightStr As String Positions = InStr(SystemConfig, SetupStr) Positione = InStr(Positions, SystemConfig, ";") LeftStr = Left(SystemConfig, Positions - 1) RightStr = Right(SystemConfig, Len(SystemConfig) - Positione + 1) SystemConfig = SetupStr & "=" & SetupText SystemConfig = LeftStr & SystemConfig & RightStr End SubPublic Sub CutSetup() Dim Positions As Integer, Positione As Integer Dim LeftStr As String, RightStr As String Positions = InStr(SystemConfig, "FileEndHere") If Positions = 0 Then Exit Sub Positione = InStr(Positions, SystemConfig, ";") SystemConfig = Mid(SystemConfig, 1, Positione + 1) End SubPublic Sub SaveSetup() Dim FNum As Integer Dim CustID As String Kill App.Path & "\Vending.INI" FNum = FreeFile Open App.Path & "\Vending.INI" For Binary As #FNum SystemConfig = Trim(SystemConfig) CutSetup Put #FNum, , SystemConfig Close #FNum End Sub
首先定义类CIniFile: Option ExplicitPrivate strINI As String'Windows API Declares 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 LongPrivate 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 LongPrivate Function MakePath(ByVal strDrv As String, ByVal strDir As String) As String ' Makes an INI file: Guarantees a sub dir Do While Right$(strDrv, 1) = "\" strDrv = Left$(strDrv, Len(strDrv) - 1) Loop
Do While Left$(strDir, 1) = "\" strDir = Mid$(strDir, 2) Loop
' Return the path MakePath = strDrv & "\" & strDir End FunctionPrivate Sub CreateIni(strDrv As String, strDir As String) ' Make a new ini file strINI = MakePath(strDrv, strDir) End SubPublic Sub WriteIniKey(strSection As String, strKey As String, strValue As String) ' Write to strINI WritePrivateProfileString strSection, strKey, strValue, strINI End SubPublic Function GetIniKey(strSection As String, strKey As String) As String Dim strTmp As String Dim lngRet As String Dim i As Integer Dim strTmp2 As String
strTmp = String$(1024, Chr(32)) lngRet = GetPrivateProfileString(strSection, strKey, "", strTmp, Len(strTmp), strINI) strTmp = Trim(strTmp) strTmp2 = "" For i = 1 To Len(strTmp) If Asc(Mid(strTmp, i, 1)) <> 0 Then strTmp2 = strTmp2 + Mid(strTmp, i, 1) End If Next i strTmp = strTmp2
GetIniKey = strTmp End FunctionPublic Property Let INIFileName(ByVal New_IniPath As String) ' Sets the new ini path strINI = New_IniPath End PropertyPublic Property Get INIFileName() As String ' Returns the current ini path INIFileName = strINI End Property'***************************************清除KeyWord"键"(Sub)*********************************************** Public Function DelIniKey(ByVal SectionName As String, ByVal KeyWord As String) Dim RetVal As Integer RetVal = WritePrivateProfileString(SectionName, KeyWord, 0&, strINI) End Function'如果是清除section就少写一个Key多一个""。 '**************************************清除 Section"段"(Sub)*********************************************** Public Function DelIniSec(ByVal SectionName As String) '清除section Dim RetVal As Integer RetVal = WritePrivateProfileString(SectionName, 0&, "", strINI) End FunctionPrivate Sub Class_Initialize() INIFileName = App.Path & "\Setup.ini" End Sub
然后定义模块:mdIniFile Option Explicit'定义一个.ini类型的变量 Dim mINIfile As New CIniFile'******************************************************************* 'PURPOSE: 读取.ini文件中的内容 'SUPPOSE: 'EFFECT: 把读取到的内容赋值给参数strINI 'INPUTS: strSection:扇区名称,strLine:行标签,strINI:行内容 'RETURNS: String(a Empty String Or aSafe Err Message String) '******************************************************************* Public Function Read_INIfile(ByVal strSection As String, _ ByVal strLine As String, _ ByRef strINI As String) As String On Error GoTo ErrTrap Read_INIfile = ""
vb操作INI很方便: 一、INI文件概述 Windows INI文件,可解释为Windows初始化文件。它是一种专门用来保存应用程序初始化信息和运行环境信息的文本文件。例如Windows 3.1中两个著名的INI文件win.ini和system.ini就在Windows启动时定义了Windows环境中鼠标响应速度、使用的外壳(shell)程序等设置。Windows系统附带的许多应用程序也都有自己的INI文件,例如控制面板的INI 文件为control.ini,它也同样定义了控制面板的有关设置。ini文件是一种文本文件,它可以通过Notepad等文本编辑器进行编辑。ini文件具有特定的格式。一个INI文件是由若干个段(section)组成的,每个段中包含若干关键字(key)及相应的值(value)。段的格式如下:[SectionName] KeyName=Value其中SectionName和KeyName分别是段名和关键字名,Value为关键字对应的设定值。需要加以注意的是:(1)段名必须加以"["和"]",且"["必须在屏幕的第一列; (2)关键字名也必须从屏幕的第一列开始书写,且后面必须紧跟"="; (3)可以对文件加以注释,每行注释须以";"开头。 在Windows中,可以通过手工编辑INI 文件来改变应用程序设置。如要想将Windows的外壳程序改为文件管理器,则可将system.ini中[boot]段下的"shell=progman.exe"改为"shell=winfile.exe"。有些设置也可以直接在应用程序界面上更改,但实际上也是通过修改INI文件来保存这些修改的。二、在VB中操作INI文件的几个Windows API函数 在开发应用程序时,我们可以创建应用程序自己的INI文件,通过INI文件保存应用程序的一些运行环境信息,然后在程序中读取INI文件中的设置信息并据以处理。一旦程序的运行环境需要变更,则可以通过直接修改INI文件或在程序中提供专门的界面间接地修改INI文件来保证程序的可用性。 VB(Visual Basic)语言是近年来十分流行的一种面向对象的编程语言,但VB本身并不提供操纵INI文件的函数。所幸的是, VB支持DLL(Dynamic Link Library)的调用。(一个DLL事实上就是一个可供其它支持DLL调用的应用程序调用的外部函数集。)DLL中的函数称为API(应用编程接口,Application Programming Interface)函数。我们可以通过调用相应的API函数来实现操纵INI文件的功能。下面列出了相关的API函数及其说明。在使用这些函数之前,必须首先在VB的模块文件(.bas)中用Declare语句对它们进行声明。三、实例分析 下面就笔者参加天津财经学院教学办公自动化(OA)系统开发的实践介绍一下具体的实现方法。假定项目文件为man.mak,对应的INI文件为man.ini,其部分内容如下:[数据库] 文件名=\\DEC_LX5120\DB\OA.mdb [开户银行] 类型数=3 B1=中国人民银行 B2=中国农业银行 B3=中国工商银行1. 在程序启动时(执行SUB MAIN()和SUB FORM_LOAD()),从man.ini文件中读取相应的值并进行以后的操作。其中SUB MAIN()中的有关代码如下:Dim DbName as String*255 '数据库名 Dim n as Integer '得到INI文件名,INIfileName为一全局变量 INIfileName=App.Path&"\"&app.ExeName&".ini" '从man.ini中读取数据库文件名 n=GetPrivateProfileString("数据库","文件名","",DbName,Len(DbName),INIfileName) DbName=Left(DbName,n) '打开数据库,Db为一全局变量 Set Db=OpenDatabase(DbName) 在FORM_LOAD()过程中,读取了man.ini中有关的内容并加入相应的组合框(Combo Box)列表中。这里只给出对"[开户银行]"段的相应操作,代码如下: Dim BankCount as Integer '银行类型数 Dim BankName as String*255 '银行名 Dim i as Integer,n as Integer '读取原有银行类型数 BankCount=GetPrivateProfileInt("开户银行","类型数",0,INIfileName) '读取银行名并加入到组合框cmbBank中 For I=1 to BankCount n=GetPrivateProfileString("开户银行","B"&i,BankName,Len(BankName),INIfileName) BankName=Left(BankName,n) cmbBank.AddItem BankName Next I2. 在程序中提供了一个专用维护界面,该界面通过操作INI文件的相应内容来实现相应的修改。'下面代码实现数据库路径的修改 Dim n as Integer 'txtDbName.Text对应新的数据库文件名 If txtDbName.Text="" Then MsgBox "数据库文件名不能为空!",MB_ICONSTOP,App.Title txtDbName.SetFocus Exit Sub Else '修改数据库文件名 n=WritePrivateProfileString("数据库","文件名",txtDbName.Text,INIfileName) End If'下面代码往组合框"开户银行"中增加一个新银行 Dim NewBank as String '新银行名 Dim BankCount as Integer '银行类型数 Dim I as Integer,n as Integer '输入新银行名 NewBank=InputBox("增加开户银行。",App.Title,"") If NewBank="" Then MsgBox "银行名不能为空!",MB_ICONSTOP,App.Title Exit Sub Else '判断输入的银行名是否已存在于列表中 For I=0 to cmbBank.ListCount-1 If NewBank=cmbBank.List(i) Then '存在则终止 MsgBox NewBank&"已存在于列表中!",MB_ICONSTOP,App.Title) Exit Sub End If Next I '读取原银行类型数 BankCount=GetPriVateProfileInt("开户银行","类型数",0,INIfileName) '将银行类型数增1 BankCount=BankCount+1 n=WritePrivateProfileString("开户银行","类型数",Str(BankCount),INIfileName) '将新银行名写入INI文件中 n=WritePrivateProfileString("开户银行","B"&BankCount,NewBank,INIfileName) End If四、结论 综上所述,在实际的VB应用程序开发中,适当地利用INI文件,可以很好地改善程序的可维护性和可用性。尤其在数据库访问中使用INI文件可使用户在数据库路径改变时免去修改原代码之苦。在实际开发中,若结合一定的维护界面,也可使应用程序容易维护,增强友好性。 http://www.baidu.com/baidu?word=vb+ini&tn=myie2dg读文件用到GetPrivateProfileString,写文件需要用到WritePrivateProfileString。 在窗体放置两个命令按钮Command1与Command2,分别用来执行写操作与读操作。 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 Private Sub Command1_Click() Dim A As Long '写信息 '修改ABC.INI文件中TIP字段中START的值为当前系统时间 '如果该文件不存在会自动建立,当函数返回值为0时说明修改不成功 A = WritePrivateProfileString("TIP", "START", Time$, App.Path & "\ABC.INI") If A = 0 Then MsgBox ("写文件时出错") End Sub Private Sub Command2_Click() Dim A As Long Dim T As String '读取信息 T = Space$(1000) '事先定义读取值的字串宽度 '读取ABC.INI文件中TIP字段中START的值并打印出来 '当函数返回值为0时说明读取数据出错 A = GetPrivateProfileString("TIP", "START", "", T, 1000, App.Path & "\ABC.INI") If A = 0 Then MsgBox "找不到所需字段": Exit Sub Print Left$(T, Len(Trim$(T)) - 1) End Sub如果你想让你的控件不释放直接在EXE文件内但还要求加载使用这个控件是办不到的,除非操作系统中原已存在这个控件。如果你只是想作一个类似绿软件的EXE文件还是有办法的(当然你要保证你的这个EXE是能正常运行的也就是不少必要的链接库,VB至少需要MSVBVM60.DLL支持),下面是我采用的方法,也是最标准的使用方法。1、加载资源文件: 菜单之“外接程序”-“外接程序管理器”,双击“VB资源管理器”确定;菜单-“资源编辑器”;在此编辑器内“添加自定义资源”;选择你的控件文件;保存资源文件。这个控件将以101号资源打包到你的程序中了。2、释放文件:以下假设控件为ABC.OCX释放路径为系统目录下 Dim Tao() As Byte, i As Long, j As Long If Dir(SYSDIRPATH & "ABC.OCX") = "" Then 'SYSDIRPATH为操作系统系统目录要事先取得 Tao = LoadResData(101, "CUSTOM") '将自定义资源中101号资源读入数组TAO Open SYSDIRPATH & "ABC.OCX" For Binary As #1 For i = 0 To 46592 - 1 '这里的46592是该控件文件的准确字节数(大小) Put #1, , Tao(i) Next i Close #1 End If3、注册控件: 如果你的这个控件安装后必须注册才能使用请使用下面一行语句完成注册否则就不用了. j = Shell(SYSDIRPATH & "REGSVR32.EXE /s " & SYSDIRPATH & "ABC.OCX")要注意,这种方法的使用,你要确保控件文件的释放在程序执行的开始,最后在SUB MAIN()过程中,千万不要把代码设计在使用并加载有这个控件的窗体代码中,不然程序运行到这个窗体时检测以操作系统中没有这个控件是要出错的,而你在此窗体加载前就完成了控件安装与注册就不会出错。另外你还需要在开始检测操作系统是否有这个控件,有就可以跳过以上代码直接使用。 ========================================= 转贴的 不知道对你有没有帮助
怎么最近老是有人问这样的问题?给你原码: '读ini文件的函数 Public Function GetIniFile(ByVal AppName As String, ByVal KeyName As String) As String On Error GoTo GetIniFileErr
Dim RetStr As String RetStr = String(255, Chr(0)) GetIniFile = Trim((Left(RetStr, GetPrivateProfileString(AppName, KeyName, "", RetStr, Len(RetStr), FileName)))) Exit Function
GetIniFileErr: MsgBox "读文件时发生错误!" & Chr(13) & "错误代码:" & Err.Number & Chr(13) & "错误描述:" & Err.Description, vbExclamation + vbOKOnly, "读文件错误" End Function'写ini文件的函数 Public Function WriteIniFile(ByVal AppName As String, ByVal KeyName As String, ByVal Key As String) As Boolean Dim longWrite As Long On Error GoTo WriteIniFileErr
longWrite = WritePrivateProfileString(AppName, KeyName, Key, FileName) Exit Function
FNum = FreeFile
Open App.Path & "\Vending.INI" For Binary As #FNum
SystemConfig = Space(LOF(FNum))
Get #FNum, , SystemConfig
Close #FNumPublic Function FindSetup(SetupStr As String) As String
Dim Positions As String, Positione As String
FindSetup = ""
Positions = InStr(SystemConfig, SetupStr)
If Positions = 0 Then Exit Function
Positions = Positions + Len(SetupStr) + 1
Positione = InStr(Positions, SystemConfig, ";") - Positions
FindSetup = Mid(SystemConfig, Positions, Positione)
End FunctionPublic Sub ChangeSetup(SetupStr As String, SetupText As String)
Dim Positions As Integer, Positione As Integer
Dim LeftStr As String, RightStr As String
Positions = InStr(SystemConfig, SetupStr)
Positione = InStr(Positions, SystemConfig, ";")
LeftStr = Left(SystemConfig, Positions - 1)
RightStr = Right(SystemConfig, Len(SystemConfig) - Positione + 1)
SystemConfig = SetupStr & "=" & SetupText
SystemConfig = LeftStr & SystemConfig & RightStr
End SubPublic Sub CutSetup()
Dim Positions As Integer, Positione As Integer
Dim LeftStr As String, RightStr As String
Positions = InStr(SystemConfig, "FileEndHere")
If Positions = 0 Then Exit Sub
Positione = InStr(Positions, SystemConfig, ";")
SystemConfig = Mid(SystemConfig, 1, Positione + 1)
End SubPublic Sub SaveSetup()
Dim FNum As Integer
Dim CustID As String
Kill App.Path & "\Vending.INI"
FNum = FreeFile
Open App.Path & "\Vending.INI" For Binary As #FNum
SystemConfig = Trim(SystemConfig)
CutSetup
Put #FNum, , SystemConfig
Close #FNum
End Sub
讀
GetPrivateProfileString(sSectionHeader, ByVal sKeyName, "", sRetStr, Len(sRetStr), sINIFileName))
寫
WritePrivateProfileString(sSectionHeader, sKeyName, sNewString, sINIFileName)
Option ExplicitPrivate strINI As String'Windows API Declares
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 LongPrivate 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 LongPrivate Function MakePath(ByVal strDrv As String, ByVal strDir As String) As String ' Makes an INI file: Guarantees a sub dir
Do While Right$(strDrv, 1) = "\"
strDrv = Left$(strDrv, Len(strDrv) - 1)
Loop
Do While Left$(strDir, 1) = "\"
strDir = Mid$(strDir, 2)
Loop
' Return the path
MakePath = strDrv & "\" & strDir
End FunctionPrivate Sub CreateIni(strDrv As String, strDir As String)
' Make a new ini file
strINI = MakePath(strDrv, strDir)
End SubPublic Sub WriteIniKey(strSection As String, strKey As String, strValue As String)
' Write to strINI
WritePrivateProfileString strSection, strKey, strValue, strINI
End SubPublic Function GetIniKey(strSection As String, strKey As String) As String
Dim strTmp As String
Dim lngRet As String
Dim i As Integer
Dim strTmp2 As String
strTmp = String$(1024, Chr(32))
lngRet = GetPrivateProfileString(strSection, strKey, "", strTmp, Len(strTmp), strINI)
strTmp = Trim(strTmp)
strTmp2 = ""
For i = 1 To Len(strTmp)
If Asc(Mid(strTmp, i, 1)) <> 0 Then
strTmp2 = strTmp2 + Mid(strTmp, i, 1)
End If
Next i
strTmp = strTmp2
GetIniKey = strTmp
End FunctionPublic Property Let INIFileName(ByVal New_IniPath As String)
' Sets the new ini path
strINI = New_IniPath
End PropertyPublic Property Get INIFileName() As String
' Returns the current ini path
INIFileName = strINI
End Property'***************************************清除KeyWord"键"(Sub)***********************************************
Public Function DelIniKey(ByVal SectionName As String, ByVal KeyWord As String)
Dim RetVal As Integer
RetVal = WritePrivateProfileString(SectionName, KeyWord, 0&, strINI)
End Function'如果是清除section就少写一个Key多一个""。
'**************************************清除 Section"段"(Sub)***********************************************
Public Function DelIniSec(ByVal SectionName As String) '清除section
Dim RetVal As Integer
RetVal = WritePrivateProfileString(SectionName, 0&, "", strINI)
End FunctionPrivate Sub Class_Initialize()
INIFileName = App.Path & "\Setup.ini"
End Sub
Option Explicit'定义一个.ini类型的变量
Dim mINIfile As New CIniFile'*******************************************************************
'PURPOSE: 读取.ini文件中的内容
'SUPPOSE:
'EFFECT: 把读取到的内容赋值给参数strINI
'INPUTS: strSection:扇区名称,strLine:行标签,strINI:行内容
'RETURNS: String(a Empty String Or aSafe Err Message String)
'*******************************************************************
Public Function Read_INIfile(ByVal strSection As String, _
ByVal strLine As String, _
ByRef strINI As String) As String
On Error GoTo ErrTrap
Read_INIfile = ""
'预处理参数--------------------------
strSection = Trim(strSection)
strLine = Trim(strLine)
'读取行数据---------------------------
strINI = Trim(mINIfile.GetIniKey(strSection, strLine))
Exit Function
ErrTrap:
Read_INIfile = "mdINIfile.Read_INIfile" & _
"__" & str(Err.Number) & _
"__" & Err.Description
On Error GoTo 0
End Function'*******************************************************************
'PURPOSE: 保存用户自定义数据到.ini文件中
'SUPPOSE:
'EFFECT:
'INPUTS: strSection:扇区名称,strLine:行标签,strINI:行内容
'RETURNS: String(a Empty String Or aSafe Err Message String)
'*******************************************************************
Public Function Save_INIfile(ByVal strSection As String, _
ByVal strLine As String, _
ByVal strINI As String) As String
On Error GoTo ErrTrap
Save_INIfile = ""
'预处理参数--------------------------
strSection = Trim(strSection)
strLine = Trim(strLine)
strINI = Trim(strINI)
'保存行数据--------------------------
mINIfile.WriteIniKey strSection, strLine, strINI
Exit Function
ErrTrap:
Save_INIfile = "mdINIfile.Save_INIfile" & _
"__" & str(Err.Number) & "__" & _
Err.Description
On Error GoTo 0
End Function
和Save_INIfile()这两个函数了,如果换个工程就把这两个文件加进去就行了
一、INI文件概述 Windows INI文件,可解释为Windows初始化文件。它是一种专门用来保存应用程序初始化信息和运行环境信息的文本文件。例如Windows 3.1中两个著名的INI文件win.ini和system.ini就在Windows启动时定义了Windows环境中鼠标响应速度、使用的外壳(shell)程序等设置。Windows系统附带的许多应用程序也都有自己的INI文件,例如控制面板的INI 文件为control.ini,它也同样定义了控制面板的有关设置。ini文件是一种文本文件,它可以通过Notepad等文本编辑器进行编辑。ini文件具有特定的格式。一个INI文件是由若干个段(section)组成的,每个段中包含若干关键字(key)及相应的值(value)。段的格式如下:[SectionName]
KeyName=Value其中SectionName和KeyName分别是段名和关键字名,Value为关键字对应的设定值。需要加以注意的是:(1)段名必须加以"["和"]",且"["必须在屏幕的第一列;
(2)关键字名也必须从屏幕的第一列开始书写,且后面必须紧跟"=";
(3)可以对文件加以注释,每行注释须以";"开头。 在Windows中,可以通过手工编辑INI 文件来改变应用程序设置。如要想将Windows的外壳程序改为文件管理器,则可将system.ini中[boot]段下的"shell=progman.exe"改为"shell=winfile.exe"。有些设置也可以直接在应用程序界面上更改,但实际上也是通过修改INI文件来保存这些修改的。二、在VB中操作INI文件的几个Windows API函数 在开发应用程序时,我们可以创建应用程序自己的INI文件,通过INI文件保存应用程序的一些运行环境信息,然后在程序中读取INI文件中的设置信息并据以处理。一旦程序的运行环境需要变更,则可以通过直接修改INI文件或在程序中提供专门的界面间接地修改INI文件来保证程序的可用性。 VB(Visual Basic)语言是近年来十分流行的一种面向对象的编程语言,但VB本身并不提供操纵INI文件的函数。所幸的是, VB支持DLL(Dynamic Link Library)的调用。(一个DLL事实上就是一个可供其它支持DLL调用的应用程序调用的外部函数集。)DLL中的函数称为API(应用编程接口,Application Programming Interface)函数。我们可以通过调用相应的API函数来实现操纵INI文件的功能。下面列出了相关的API函数及其说明。在使用这些函数之前,必须首先在VB的模块文件(.bas)中用Declare语句对它们进行声明。三、实例分析 下面就笔者参加天津财经学院教学办公自动化(OA)系统开发的实践介绍一下具体的实现方法。假定项目文件为man.mak,对应的INI文件为man.ini,其部分内容如下:[数据库]
文件名=\\DEC_LX5120\DB\OA.mdb
[开户银行]
类型数=3
B1=中国人民银行
B2=中国农业银行
B3=中国工商银行1. 在程序启动时(执行SUB MAIN()和SUB FORM_LOAD()),从man.ini文件中读取相应的值并进行以后的操作。其中SUB MAIN()中的有关代码如下:Dim DbName as String*255 '数据库名
Dim n as Integer
'得到INI文件名,INIfileName为一全局变量
INIfileName=App.Path&"\"&app.ExeName&".ini"
'从man.ini中读取数据库文件名
n=GetPrivateProfileString("数据库","文件名","",DbName,Len(DbName),INIfileName)
DbName=Left(DbName,n)
'打开数据库,Db为一全局变量
Set Db=OpenDatabase(DbName)
在FORM_LOAD()过程中,读取了man.ini中有关的内容并加入相应的组合框(Combo Box)列表中。这里只给出对"[开户银行]"段的相应操作,代码如下:
Dim BankCount as Integer '银行类型数
Dim BankName as String*255 '银行名
Dim i as Integer,n as Integer
'读取原有银行类型数
BankCount=GetPrivateProfileInt("开户银行","类型数",0,INIfileName)
'读取银行名并加入到组合框cmbBank中
For I=1 to BankCount
n=GetPrivateProfileString("开户银行","B"&i,BankName,Len(BankName),INIfileName)
BankName=Left(BankName,n)
cmbBank.AddItem BankName
Next I2. 在程序中提供了一个专用维护界面,该界面通过操作INI文件的相应内容来实现相应的修改。'下面代码实现数据库路径的修改
Dim n as Integer
'txtDbName.Text对应新的数据库文件名
If txtDbName.Text="" Then
MsgBox "数据库文件名不能为空!",MB_ICONSTOP,App.Title
txtDbName.SetFocus
Exit Sub
Else
'修改数据库文件名
n=WritePrivateProfileString("数据库","文件名",txtDbName.Text,INIfileName)
End If'下面代码往组合框"开户银行"中增加一个新银行
Dim NewBank as String '新银行名
Dim BankCount as Integer '银行类型数
Dim I as Integer,n as Integer
'输入新银行名
NewBank=InputBox("增加开户银行。",App.Title,"")
If NewBank="" Then
MsgBox "银行名不能为空!",MB_ICONSTOP,App.Title
Exit Sub
Else
'判断输入的银行名是否已存在于列表中
For I=0 to cmbBank.ListCount-1
If NewBank=cmbBank.List(i) Then
'存在则终止
MsgBox NewBank&"已存在于列表中!",MB_ICONSTOP,App.Title)
Exit Sub
End If
Next I
'读取原银行类型数
BankCount=GetPriVateProfileInt("开户银行","类型数",0,INIfileName)
'将银行类型数增1
BankCount=BankCount+1
n=WritePrivateProfileString("开户银行","类型数",Str(BankCount),INIfileName)
'将新银行名写入INI文件中
n=WritePrivateProfileString("开户银行","B"&BankCount,NewBank,INIfileName)
End If四、结论 综上所述,在实际的VB应用程序开发中,适当地利用INI文件,可以很好地改善程序的可维护性和可用性。尤其在数据库访问中使用INI文件可使用户在数据库路径改变时免去修改原代码之苦。在实际开发中,若结合一定的维护界面,也可使应用程序容易维护,增强友好性。
http://www.baidu.com/baidu?word=vb+ini&tn=myie2dg读文件用到GetPrivateProfileString,写文件需要用到WritePrivateProfileString。
在窗体放置两个命令按钮Command1与Command2,分别用来执行写操作与读操作。
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
Private Sub Command1_Click()
Dim A As Long
'写信息
'修改ABC.INI文件中TIP字段中START的值为当前系统时间
'如果该文件不存在会自动建立,当函数返回值为0时说明修改不成功
A = WritePrivateProfileString("TIP", "START", Time$, App.Path & "\ABC.INI")
If A = 0 Then MsgBox ("写文件时出错")
End Sub
Private Sub Command2_Click()
Dim A As Long
Dim T As String
'读取信息
T = Space$(1000) '事先定义读取值的字串宽度
'读取ABC.INI文件中TIP字段中START的值并打印出来
'当函数返回值为0时说明读取数据出错
A = GetPrivateProfileString("TIP", "START", "", T, 1000, App.Path & "\ABC.INI")
If A = 0 Then MsgBox "找不到所需字段": Exit Sub
Print Left$(T, Len(Trim$(T)) - 1)
End Sub如果你想让你的控件不释放直接在EXE文件内但还要求加载使用这个控件是办不到的,除非操作系统中原已存在这个控件。如果你只是想作一个类似绿软件的EXE文件还是有办法的(当然你要保证你的这个EXE是能正常运行的也就是不少必要的链接库,VB至少需要MSVBVM60.DLL支持),下面是我采用的方法,也是最标准的使用方法。1、加载资源文件:
菜单之“外接程序”-“外接程序管理器”,双击“VB资源管理器”确定;菜单-“资源编辑器”;在此编辑器内“添加自定义资源”;选择你的控件文件;保存资源文件。这个控件将以101号资源打包到你的程序中了。2、释放文件:以下假设控件为ABC.OCX释放路径为系统目录下
Dim Tao() As Byte, i As Long, j As Long
If Dir(SYSDIRPATH & "ABC.OCX") = "" Then 'SYSDIRPATH为操作系统系统目录要事先取得
Tao = LoadResData(101, "CUSTOM") '将自定义资源中101号资源读入数组TAO
Open SYSDIRPATH & "ABC.OCX" For Binary As #1
For i = 0 To 46592 - 1 '这里的46592是该控件文件的准确字节数(大小)
Put #1, , Tao(i)
Next i
Close #1
End If3、注册控件:
如果你的这个控件安装后必须注册才能使用请使用下面一行语句完成注册否则就不用了.
j = Shell(SYSDIRPATH & "REGSVR32.EXE /s " & SYSDIRPATH & "ABC.OCX")要注意,这种方法的使用,你要确保控件文件的释放在程序执行的开始,最后在SUB MAIN()过程中,千万不要把代码设计在使用并加载有这个控件的窗体代码中,不然程序运行到这个窗体时检测以操作系统中没有这个控件是要出错的,而你在此窗体加载前就完成了控件安装与注册就不会出错。另外你还需要在开始检测操作系统是否有这个控件,有就可以跳过以上代码直接使用。
=========================================
转贴的 不知道对你有没有帮助
'读ini文件的函数
Public Function GetIniFile(ByVal AppName As String, ByVal KeyName As String) As String
On Error GoTo GetIniFileErr
Dim RetStr As String
RetStr = String(255, Chr(0))
GetIniFile = Trim((Left(RetStr, GetPrivateProfileString(AppName, KeyName, "", RetStr, Len(RetStr), FileName))))
Exit Function
GetIniFileErr:
MsgBox "读文件时发生错误!" & Chr(13) & "错误代码:" & Err.Number & Chr(13) & "错误描述:" & Err.Description, vbExclamation + vbOKOnly, "读文件错误"
End Function'写ini文件的函数
Public Function WriteIniFile(ByVal AppName As String, ByVal KeyName As String, ByVal Key As String) As Boolean
Dim longWrite As Long
On Error GoTo WriteIniFileErr
longWrite = WritePrivateProfileString(AppName, KeyName, Key, FileName)
Exit Function
WriteIniFileErr:
MsgBox "写文件时发生错误!" & Chr(13) & "错误代码:" & Err.Number & Chr(13) & "错误描述:" & Err.Description, vbExclamation + vbOKOnly, "写文件错误"
End Function