CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  控件

一个比较难的问题(请高手解决,有挑战性)帮顶有分绝不食言

楼主aiuwl(求知者)2005-07-13 21:28:45 在 VB / 控件 提问

我想使一个COMOX或DATACMBOX在程序生成EXE后可仍可改变其下拉菜单里的项目。再解决一下吧,COMOX的下拉列表可以用代码添加,DATACMBOX可以绑定数据库,但它们都是在编程的时候编辑的,但我想在编程后,在客户的机器可以改变。希望我说明白了,谢谢各位了,如果知道的请拉兄弟一把,如果不太了解,可以帮忙顶一下(有分)! 问题点数:100、回复次数:65Top

1 楼visualbear(void)回复于 2005-07-13 21:36:39 得分 0

帮顶接分!Top

2 楼MmMVP(杜霖:(现在是DooDu的马甲。。))回复于 2005-07-13 21:46:03 得分 0

对于combox,可以有如下思路:  
   
  1。  
  用sendmessage这个api传   CB_RESETCONTENT     清除所有列表项。    
   
  2。  
  然后   CB_INSERTSTRING     在列表框中的指定位置插入字符串。wParam指定了列表项的索引,如果为-1,则字符串将被添加到列表的末尾。lParam指向要插入的字符串。本操作返回实际的插入位置,若发生错误,会返回LB_ERR或LB_ERRSPACE。  
   
  对于已编译好的exe,就可以这样用sendmessage处理了。  
  Top

3 楼DooDu(杜霖:I want,I can(开关拉))回复于 2005-07-13 21:48:38 得分 0

汗。。怎么是登的是这个id??  
  要给分请给doodo,谢谢   :)Top

4 楼DooDu(杜霖:I want,I can(开关拉))回复于 2005-07-13 21:50:47 得分 0

其实,如果程序是你写的,可以用动态生成控件的办法,也就不用再用个exe来控制了Top

5 楼aiuwl(求知者)回复于 2005-07-13 21:51:03 得分 0

自已顶一下Top

6 楼aiuwl(求知者)回复于 2005-07-13 21:55:10 得分 0

MmMVP(杜霖:(现在是DooDu的马甲。。))    
  高手你能说的详细些吗?我是个新手,不太明白。谢谢了Top

7 楼aiuwl(求知者)回复于 2005-07-13 21:58:28 得分 0

我的改变指的是添加删除或编辑Top

8 楼zhanshua()回复于 2005-07-13 21:58:55 得分 0

看了头晕。  
  但我还是帮你顶下。Top

9 楼aiuwl(求知者)回复于 2005-07-13 22:03:49 得分 0

谢谢帮顶的朋友  
  Top

10 楼only86(阿蒙)回复于 2005-07-14 02:38:57 得分 0

感兴趣,UPTop

11 楼aiuwl(求知者)回复于 2005-07-14 22:28:34 得分 0

upTop

12 楼WecanHuang(曾阿牛)回复于 2005-07-14 22:30:29 得分 0

帮顶Top

13 楼jjkk168(老加班的人--好好学习,天天吃饭)回复于 2005-07-14 23:52:53 得分 0

DooDu还不闭关去,或者散分去啊!!!  
   
  没太明白楼主的意思,是不是指一个已经编译成Exe的ComboBox里面需要加入内容,但不想更改代码?Top

14 楼DooDu(杜霖:I want,I can(开关拉))回复于 2005-07-15 02:47:22 得分 0

哈   上次的比赛搞定了,还得去8月3号去北京再比次,又是20多天那  
   
  to   楼主:  
   
  我说的没看明白?..是我语文不好。。  
  能再说清楚你的意思么?是改变别人的exe中的combobox的内容?Top

15 楼ningkang(搜索客)回复于 2005-07-15 05:28:42 得分 0

自己的程序:就改成从数据库里读数据  
  别人的程序:不会Top

16 楼greentest(铜都铜业QQ:331338630)回复于 2005-07-15 08:47:32 得分 0

jfTop

17 楼QQ576006(Ken)回复于 2005-07-15 09:27:07 得分 0

其实有一个比较简便的方法,将程序里combox,datacombox的值都设置成从ini文件里去读取,这样在想要改变的时候,就可以通过修改ini文件就可以了。Top

18 楼panxuejian(大肚鼠)回复于 2005-07-15 09:56:57 得分 0

将ComboBox的加载项,存在数据库就可以实现动态添加项目了,再编辑时,通过对数据库更改就可以了Top

19 楼aiuwl(求知者)回复于 2005-07-16 09:53:20 得分 0

是我自己的程序,我想用COMBOX绑定一个字段,用它向这个字段的添加字符,也就是不用手工往里面入了,但是根据实际需要,改变(编辑、添加、删除)  
  Combo2.Clear  
  Combo2.AddItem   "左"  
  Combo2.AddItem   "右"  
   
  里的内容,  
  我也知道用datacombox可以绑定一个数据库,这样比较方便,但我已经把它绑定到了一个数据库作为添加字段值的选项了,我觉得datacombox不能绑定两个数据库吧。  
   
  QQ576006(Ken)你说的INI具体怎么用能说说吗?  
   
  我是一刚学VB时间不长的新手,感觉大家对我的帮助。  
   
   
   
   
  Top

20 楼ejoe313(做最好的自己!)回复于 2005-07-16 10:44:19 得分 0

UP  
  Top

21 楼brother2605(幽灵)回复于 2005-07-16 11:59:35 得分 0

UPTop

22 楼killl(好烦)回复于 2005-07-16 14:57:48 得分 0

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   I  
   
  2.   在程序中提供了一个专用维护界面,该界面通过操作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  
   
  Top

23 楼mycatlove(冰湖小生)回复于 2005-07-16 15:04:47 得分 0

用INI文件是个不错的方法。每次程序启动时候首先写INI文件,然后从INI里读取下拉项。Top

24 楼aiuwl(求知者)回复于 2005-07-17 22:38:28 得分 0

谢谢我研究一下吧。我比较菜的。Top

25 楼molin_a_6()回复于 2005-07-18 09:41:26 得分 0

ini的确是个不错的选择,谢谢lz,我也多学了一招。Top

26 楼fu0212(傅红雪)回复于 2005-07-18 10:53:17 得分 0

这就让他把分拣走了阿   我不舒服   哈哈  
  也可以用   注册表   或是共享内存   管道   程序间通信阿  
   
  更复杂一点的就是   动态修改exe文件   把要改变的数据加到   程序末尾   用原程序读本身末尾   就可以了Top

27 楼tkl1980()回复于 2005-07-18 14:40:36 得分 0

dingTop

28 楼user886633()回复于 2005-07-18 14:49:13 得分 0

dingTop

29 楼wenhongL(三脚猫)回复于 2005-07-18 15:02:12 得分 0

还真有挑战----性Top

30 楼Dr_Jones(kickyourass)回复于 2005-07-18 15:13:04 得分 0

learning  
  Top

31 楼greentest(铜都铜业QQ:331338630)回复于 2005-07-19 10:44:54 得分 0

combobox编译后也是可以改变内容的  
  可以帮定一个字段,在数据库里改变内容,或者用程序修改字段内容,不就改变了吗?  
  也可以循环读取字段内容,添加到里面啊  
  我用一个文本框,一个combobox,一个command就可以实现  
  Private   Sub   Command1_Click()  
  Combo1.AddItem   Text1.Text  
  End   Sub  
  不知道是不是你要的Top

32 楼zhujiechang(小朱)回复于 2005-07-19 16:01:32 得分 0

自己建立消息机制。  
  这样建立自定义消息可做外面接口,这样外面的程序就可通过消息机制控制你想给  
  他们控制的事情了。Top

33 楼aiuwl(求知者)回复于 2005-07-21 15:31:55 得分 0

还有有点弄不明白.有没有实例能下载啊Top

34 楼aiuwl(求知者)回复于 2005-07-21 20:38:02 得分 0

我太菜了。Top

35 楼fishmans(金脚指)回复于 2005-07-23 02:52:28 得分 0

来来来,我来给你一个小例子  
   
  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就好了Top

36 楼aiuwl(求知者)回复于 2005-07-23 04:02:29 得分 0

感觉应该不错,我试试Top

37 楼province_(雍昊)回复于 2005-07-23 07:53:15 得分 0

说穿了就是从外部取得下拉列表的内容,同时如果在程序中修改了在以后的运行中也能反映这些变化,解决的办法最简单的就是弄个文本文件也不一定非得INI文件,随便用行文本就可以了。Top

38 楼aiuwl(求知者)回复于 2005-07-24 14:12:04 得分 0

但具体怎么操作啊?Top

39 楼belldandy11(路漫漫其修远兮,吾将上CSDN求索)回复于 2005-07-24 23:04:13 得分 0

接分就行动 我顶~~~~~~~~~Top

40 楼tmickey(大飞啊)回复于 2005-07-25 14:17:44 得分 0

有分就一定来,我顶`````````Top

41 楼chewinggum(口香糖·个人二五计划第一年)回复于 2005-07-25 16:15:11 得分 0

为什么非要用绑定才能和数据库里面的东西同步呢?  
  可以先用ADO查询数据库,把数据先弄到RECORDSET里面然后动态填写到LISTBOX里面去嘛  
  比如可以在窗体的LOAD事件中  
   
  RECORDSET.MOVEFIRST  
  LIST1.CLEAR  
  DO   WHILE   NOT   RECORDSET.EOF  
          LIST1.ADDITEM   RECORDSET(0)  
          RECORDSET.MOVENEXT  
  LOOP  
   
  其他的什么INI啊、配置文件啊原理大同小异,无非就是把东西填入LIST而不是在程序里写死LIST的内容  
  Top

42 楼sdrcxzy(大向)回复于 2005-07-25 16:56:55 得分 0

口香糖,没错!Top

43 楼celevantis(三藏)回复于 2005-07-26 08:27:13 得分 0

ding~Top

44 楼wangwei1982(阳光再现)回复于 2005-07-26 08:41:12 得分 0

UP  
  Top

45 楼chewinggum(口香糖·个人二五计划第一年)回复于 2005-07-26 09:20:39 得分 0

我们现在做的产品300多个界面所有的下拉选项全部都是从数据库中查询后填写,部分界面元素根据数据库里的数据动态生成,这样才能保证在客户需求不断变化的情况下我们的工作量最小,一般仅需要修改数据库脚本就能够解决问题。硬代码是很难适应实际情况的。Top

46 楼aiuwl(求知者)回复于 2005-07-26 14:41:34 得分 0

(口香糖)   看来真是个高手啊,但你的办法能详细说说吗?我不是专业编程的,我只是没事学着玩的。所以比较菜还请你多多指教了。你办法具体是怎么操作的啊。谢谢了。再谢谢了Top

47 楼aiuwl(求知者)回复于 2005-07-27 13:42:13 得分 0

up  
  Top

48 楼aiuwl(求知者)回复于 2005-07-27 14:47:35 得分 0

大家帮个忙啊  
  Top

49 楼jjkk168(老加班的人--好好学习,天天吃饭)回复于 2005-07-27 15:30:59 得分 0

从一开始就没有看清楚楼主到底想要干什么,楼主干脆再把题目详细说一遍,大家好帮你,不然,谁都不知道是怎么回事.Top

50 楼gz_shf(买笑)回复于 2005-07-27 15:35:11 得分 0

口香糖的例子已经很清楚了,要是不明白的就多了解list控件和ADO类。Top

51 楼simonlee2003()回复于 2005-07-27 15:59:37 得分 0

我不太明白你的意思   ,   是不是说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   If  
   
  End   SubTop

52 楼xiaomaoaa()回复于 2005-07-27 17:02:12 得分 0

你的想法很有创意Top

53 楼optop(爱琴海)回复于 2005-07-27 18:00:57 得分 0

ini文件,方便實用   !Top

54 楼upsuper(究极人类)回复于 2005-07-27 18:14:14 得分 0

如果使用注册表呢?Top

55 楼aiuwl(求知者)回复于 2005-07-28 15:39:24 得分 0

我比较笨,试试这位高手的没弄明白,又试试那位高手的也不弄明白。哎!各位高手的是怎么学的那么高啊,我这只菜鸟想进一小步怎么就这么难啊。谢谢各位高手了。  
  也谢谢各位帮顶的朋友了,看来还得加分啊。Top

56 楼aiuwl(求知者)回复于 2005-07-28 15:46:57 得分 0

要不各位大侠有空给小弟来个带控件的实例吧。“这小子有点得寸进尺”Top

57 楼haen_zhou(Haen)回复于 2005-07-28 18:59:41 得分 0

依妹儿给我  
  分给我Top

58 楼chewinggum(口香糖·个人二五计划第一年)回复于 2005-07-28 20:02:42 得分 0

一定要一个实例吗?那就给你一个。运行这个实例的前提是现在本机装上SQL   Server  
  创建一个工程,窗体放一个下拉列表。程序运行以后将查询数据库数据并填充列表,如果你修改了数据库中相应的数据,那么下次启动工程的时候,下拉列表的内容随之改变。  
   
  Option   Explicit  
   
  Private   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  
   
   
  顺便说一声,楼上的做人不厚道哦Top

59 楼aiuwl(求知者)回复于 2005-07-28 20:55:04 得分 0

谢谢高手你的帮助啊。  
  呜呜可是我用的是ACCESS数据库啊。Top

60 楼sdcy123(菜鸟)回复于 2005-07-28 21:04:09 得分 0

帮顶!Top

61 楼chewinggum(口香糖·个人二五计划第一年)回复于 2005-07-28 21:55:05 得分 0

大同小异嘛,把对sql的访问改成对access的访问不就可以了。要学会举一仿三,不可能总有一模一样的代码等着你去拷贝粘贴。如果是这样兴许过一段时间你又来索取访问SQL的代码了Top

62 楼JAVAMARS(伤心小箭)回复于 2005-07-29 10:15:42 得分 0

不知道这种方法合适不?就是把数据库中的数据提取出来灌入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  
   
   
  Top

63 楼JAVAMARS(伤心小箭)回复于 2005-07-29 10:28:56 得分 0

如果还需要动态修改查询的结果集,可以把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   Function  
   
  Public   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写入ini  
   
  dim   sSql   as   string  
  sSql   =   GetFile("Sql")'将sql语句取出来  
   
  也可以直接修改ini文件里面的SQL项  
  Top

64 楼aiuwl(求知者)回复于 2005-07-29 20:38:09 得分 0

真是感谢大伙了,有这么多高手来帮忙,真的谢谢你们了。Top

65 楼aiuwl(求知者)回复于 2005-07-31 22:44:47 得分 0

等我弄明白一定给高手从别的问题再加些分,真的太感动了。Top

相关问题

  • 谁帮我提前帖子我给谁分!绝不食言!
  • 大虾快帮忙!分数不多,但绝不食言!
  • 帮点一下送10分,绝不食言.(散分200分)
  • 帮点一下送10分,绝不食言.(散分200分)
  • 麻烦大家帮我看看哪里错了?急!谁能帮我解决200分奉送。绝不食言。
  • 1000分,绝不食言。1000分,绝不食言。1000分,绝不食言。
  • 1000分,绝不食言。1000分,绝不食言。1000分,绝不食言。
  • 100分酬谢帮我很好的解决这个问题的人,绝不食言。。。。
  • 各位高手,急!!!!!谁能帮我找回我QQ的密码,我双手捧上400分,绝不食言!
  • CSDN高手何在??? 超难度问题,解决的给500分,绝不食言。帮忙up也有分。

关键词

  • 数据库
  • 文件
  • 函数
  • 字段
  • 修改
  • 文件名
  • 应用程序
  • 代码
  • 银行
  • ini

得分解答快速导航

  • 帖主:aiuwl

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo