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
combobox编译后也是可以改变内容的 可以帮定一个字段,在数据库里改变内容,或者用程序修改字段内容,不就改变了吗? 也可以循环读取字段内容,添加到里面啊 我用一个文本框,一个combobox,一个command就可以实现 Private Sub Command1_Click() Combo1.AddItem Text1.Text End Sub 不知道是不是你要的
来来来,我来给你一个小例子private sub form_load() dim str as string on error resume next open app.path+"\dd.txt" for input as #1 do while not eof(1) line input #1,str combox.additem str loop close #1 end sub 这是通过文本文件的方式加载item项,要改变item项,修改dd.txt就好了
为什么非要用绑定才能和数据库里面的东西同步呢? 可以先用ADO查询数据库,把数据先弄到RECORDSET里面然后动态填写到LISTBOX里面去嘛 比如可以在窗体的LOAD事件中RECORDSET.MOVEFIRST LIST1.CLEAR DO WHILE NOT RECORDSET.EOF LIST1.ADDITEM RECORDSET(0) RECORDSET.MOVENEXT LOOP其他的什么INI啊、配置文件啊原理大同小异,无非就是把东西填入LIST而不是在程序里写死LIST的内容
口香糖的例子已经很清楚了,要是不明白的就多了解list控件和ADO类。
我不太明白你的意思 , 是不是说datacombo连接的是数据库某个表的字段内容, 如果有就调用, 没有用户自己填写后进入数据库?Private Sub DataCombo1_LostFocus() Set rs = New ADODB.Recordset rs.Open "select * from guige where guige ='" & Trim(DataCombo1.Text) & "'", con, adOpenKeyset, adLockPessimistic If rs.EOF Or rs.BOF Then If DataCombo1.Text <> "" Then rs.AddNew rs!guige = Trim(DataCombo1.Text) rs.Update rs.Close rs.Open "select * from guige", con, 1, 1 Set DataCombo1.RowSource = rs DataCombo1.ListField = "guige"End If End IfEnd Sub
一定要一个实例吗?那就给你一个。运行这个实例的前提是现在本机装上SQL Server 创建一个工程,窗体放一个下拉列表。程序运行以后将查询数据库数据并填充列表,如果你修改了数据库中相应的数据,那么下次启动工程的时候,下拉列表的内容随之改变。Option ExplicitPrivate Sub Form_Load() '定义ADO的Connection对象 Dim cn As New ADODB.Connection '定义ADO的Recordset对象 Dim rst As ADODB.Recordset '创建SQL Server连接 cn.Open "Provider=SQLOLEDB.1;Remote Server=127.0.0.1", "rzzx", "bjjhzjqs" '执行查询语句 Set rst = cn.Execute("SELECT CompanyName FROM Northwind.dbo.Customers where ContactTitle = 'Sales Agent'") '清空列表 Combo1.Clear '循环填充下拉列表 Do While Not rst.EOF Combo1.AddItem rst.Fields("CompanyName") rst.MoveNext DoEvents Loop '默认显示第一个选项 Combo1.ListIndex = 0 '释放内存 Set rst = Nothing cn.Close Set cn = Nothing End Sub 顺便说一声,楼上的做人不厚道哦
不知道这种方法合适不?就是把数据库中的数据提取出来灌入combo,如果将combo的style属性改为2-dropdown list,就只能选择不能往combo中写入字符了。Private Sub Form_Load() Dim sSQL As String ''''执行sql语句生成结果集 sSQL = " SELECT Code_Id,Code_Name from SysCode " _ & " Where Code_Type = '1'" If DataEn.CN.State = 0 Then DataEn.CN.Open Set ADORS = DataEn.CN.Execute(sSQL) '''清空combo然后注入结果集,显示内容为ADORS.Fields(1),Combo_ks.ItemData的数据 '''是ADORS.Fields(0) Combo_ks.Clear While Not ADORS.EOF Combo_ks.AddItem ADORS.Fields(1) Combo_ks.ItemData(Combo_ks.ListCount - 1) = ADORS.Fields(0) ADORS.MoveNext Wend Combo_ks.ListIndex = 0 end sub access执行sql语句生成结果集的代码可以写成如下的 Private Sub Form_Load() Dim sSQL As String Dim mlink As String Dim R As New ADODB.Recordset Dim Conn As New ADODB.Connection mlink = "provider=microsoft.jet.oledb.3.51;data source=C:\score_manage\score.mdb;" '"source=C:\score_manage\score.mdb"是access的数据库位置 sSQL = " SELECT Code_Id,Code_Name from SysCode " _ & " Where Code_Type = '1'" R.Open sSQL , Conn, adOpenStatic, adLockPessimistic '''清空combo然后注入结果集,显示内容为ADORS.Fields(1),Combo_ks.ItemData的数据 '''是ADORS.Fields(0) Combo_ks.Clear While Not ADORS.EOF Combo_ks.AddItem ADORS.Fields(1) Combo_ks.ItemData(Combo_ks.ListCount - 1) = ADORS.Fields(0) ADORS.MoveNext Wend Combo_ks.ListIndex = 0 end sub
如果还需要动态修改查询的结果集,可以把sSql(sql语句)写入ini文件,我写了两个函数 可以在ini文件里面定义[setting],里面写上SQL=sql语句.'/存取INI 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 Long 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 Function GetFile(ByVal lpKeyName As String) Dim sIniFile As String, sTemp As String sIniFile = App.Path + "\zcgl.ini" sTemp = Space$(256) GetPrivateProfileString "Settings", lpKeyName, "", sTemp, 256, sIniFile GetFile = Mid(Trim(sTemp), 1, Len(Trim(sTemp)) - 1) End FunctionPublic Function WriteFile(ByVal lpKeyName As String, ByVal lpString As String) Dim sIniFile As String, sTemp As String sIniFile = App.Path + "\zcgl.ini" WritePrivateProfileString "settings", lpKeyName, CStr(lpString), sIniFile End Function '以上部分可以在模块里面定义,使用的时候如下 dim run as string run = WriteFile("sql", sSql)'将sql语句sSql写入inidim sSql as string sSql = GetFile("Sql")'将sql语句取出来也可以直接修改ini文件里面的SQL项
用sendmessage这个api传 CB_RESETCONTENT 清除所有列表项。 2。
然后 CB_INSERTSTRING 在列表框中的指定位置插入字符串。wParam指定了列表项的索引,如果为-1,则字符串将被添加到列表的末尾。lParam指向要插入的字符串。本操作返回实际的插入位置,若发生错误,会返回LB_ERR或LB_ERRSPACE。对于已编译好的exe,就可以这样用sendmessage处理了。
要给分请给doodo,谢谢 :)
高手你能说的详细些吗?我是个新手,不太明白。谢谢了
能再说清楚你的意思么?是改变别人的exe中的combobox的内容?
Combo2.Clear
Combo2.AddItem "左"
Combo2.AddItem "右"里的内容,
我也知道用datacombox可以绑定一个数据库,这样比较方便,但我已经把它绑定到了一个数据库作为添加字段值的选项了,我觉得datacombox不能绑定两个数据库吧。QQ576006(Ken)你说的INI具体怎么用能说说吗?我是一刚学VB时间不长的新手,感觉大家对我的帮助。
一、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文件 把要改变的数据加到 程序末尾 用原程序读本身末尾 就可以了
可以帮定一个字段,在数据库里改变内容,或者用程序修改字段内容,不就改变了吗?
也可以循环读取字段内容,添加到里面啊
我用一个文本框,一个combobox,一个command就可以实现
Private Sub Command1_Click()
Combo1.AddItem Text1.Text
End Sub
不知道是不是你要的
dim str as string
on error resume next
open app.path+"\dd.txt" for input as #1
do while not eof(1)
line input #1,str
combox.additem str
loop
close #1
end sub
这是通过文本文件的方式加载item项,要改变item项,修改dd.txt就好了
可以先用ADO查询数据库,把数据先弄到RECORDSET里面然后动态填写到LISTBOX里面去嘛
比如可以在窗体的LOAD事件中RECORDSET.MOVEFIRST
LIST1.CLEAR
DO WHILE NOT RECORDSET.EOF
LIST1.ADDITEM RECORDSET(0)
RECORDSET.MOVENEXT
LOOP其他的什么INI啊、配置文件啊原理大同小异,无非就是把东西填入LIST而不是在程序里写死LIST的内容
Set rs = New ADODB.Recordset
rs.Open "select * from guige where guige ='" & Trim(DataCombo1.Text) & "'", con, adOpenKeyset, adLockPessimistic
If rs.EOF Or rs.BOF Then
If DataCombo1.Text <> "" Then
rs.AddNew
rs!guige = Trim(DataCombo1.Text)
rs.Update
rs.Close
rs.Open "select * from guige", con, 1, 1
Set DataCombo1.RowSource = rs
DataCombo1.ListField = "guige"End If
End IfEnd Sub
创建一个工程,窗体放一个下拉列表。程序运行以后将查询数据库数据并填充列表,如果你修改了数据库中相应的数据,那么下次启动工程的时候,下拉列表的内容随之改变。Option ExplicitPrivate Sub Form_Load()
'定义ADO的Connection对象
Dim cn As New ADODB.Connection
'定义ADO的Recordset对象
Dim rst As ADODB.Recordset
'创建SQL Server连接
cn.Open "Provider=SQLOLEDB.1;Remote Server=127.0.0.1", "rzzx", "bjjhzjqs"
'执行查询语句
Set rst = cn.Execute("SELECT CompanyName FROM Northwind.dbo.Customers where ContactTitle = 'Sales Agent'")
'清空列表
Combo1.Clear
'循环填充下拉列表
Do While Not rst.EOF
Combo1.AddItem rst.Fields("CompanyName")
rst.MoveNext
DoEvents
Loop
'默认显示第一个选项
Combo1.ListIndex = 0
'释放内存
Set rst = Nothing
cn.Close
Set cn = Nothing
End Sub
顺便说一声,楼上的做人不厚道哦
呜呜可是我用的是ACCESS数据库啊。
Dim sSQL As String
''''执行sql语句生成结果集
sSQL = " SELECT Code_Id,Code_Name from SysCode " _
& " Where Code_Type = '1'"
If DataEn.CN.State = 0 Then DataEn.CN.Open
Set ADORS = DataEn.CN.Execute(sSQL)
'''清空combo然后注入结果集,显示内容为ADORS.Fields(1),Combo_ks.ItemData的数据
'''是ADORS.Fields(0)
Combo_ks.Clear
While Not ADORS.EOF
Combo_ks.AddItem ADORS.Fields(1)
Combo_ks.ItemData(Combo_ks.ListCount - 1) = ADORS.Fields(0)
ADORS.MoveNext
Wend
Combo_ks.ListIndex = 0
end sub
access执行sql语句生成结果集的代码可以写成如下的
Private Sub Form_Load()
Dim sSQL As String
Dim mlink As String
Dim R As New ADODB.Recordset
Dim Conn As New ADODB.Connection
mlink = "provider=microsoft.jet.oledb.3.51;data source=C:\score_manage\score.mdb;" '"source=C:\score_manage\score.mdb"是access的数据库位置
sSQL = " SELECT Code_Id,Code_Name from SysCode " _
& " Where Code_Type = '1'"
R.Open sSQL , Conn, adOpenStatic, adLockPessimistic
'''清空combo然后注入结果集,显示内容为ADORS.Fields(1),Combo_ks.ItemData的数据
'''是ADORS.Fields(0)
Combo_ks.Clear
While Not ADORS.EOF
Combo_ks.AddItem ADORS.Fields(1)
Combo_ks.ItemData(Combo_ks.ListCount - 1) = ADORS.Fields(0)
ADORS.MoveNext
Wend
Combo_ks.ListIndex = 0
end sub
可以在ini文件里面定义[setting],里面写上SQL=sql语句.'/存取INI
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 Long
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 Function GetFile(ByVal lpKeyName As String)
Dim sIniFile As String, sTemp As String
sIniFile = App.Path + "\zcgl.ini"
sTemp = Space$(256)
GetPrivateProfileString "Settings", lpKeyName, "", sTemp, 256, sIniFile
GetFile = Mid(Trim(sTemp), 1, Len(Trim(sTemp)) - 1)
End FunctionPublic Function WriteFile(ByVal lpKeyName As String, ByVal lpString As String)
Dim sIniFile As String, sTemp As String
sIniFile = App.Path + "\zcgl.ini"
WritePrivateProfileString "settings", lpKeyName, CStr(lpString), sIniFile
End Function
'以上部分可以在模块里面定义,使用的时候如下
dim run as string
run = WriteFile("sql", sSql)'将sql语句sSql写入inidim sSql as string
sSql = GetFile("Sql")'将sql语句取出来也可以直接修改ini文件里面的SQL项