+ -
当前位置:首页 → 问答吧 → 求助-----datacombo控件的数据源 datasource 问题

求助-----datacombo控件的数据源 datasource 问题

时间:2011-12-24

来源:互联网

datacombo可以将数据库中查询结果的一列显示在下拉列表中 用作用户选择 程序设计时经常会用到  


我的问题是

关于datacombo控件数据源的问题,这个问题困扰我好久,都有哪些可以作为数据源呢,当然ADODC控件是可以的 但是这个太麻烦每个form都要弄一个还要设置visible=false 所以我想有没有其他的方法 问题也就由我的尝试引出

问题1: 我定义了一个全局的变量rst as adodb.recordset 然后我写了一个函数,searchsql(byval sqlstr as string ,byref rst as adodb.recordset) 作为统一的查询函数 将查询结果放在 rst (adodb.recordset对象)中
接着问题就来了 当将rst 赋值给 set datacombo.DataSource = rst ; DataCombo.DataField = rst.Fields(1) 运行后 在控件的下拉列表中 只有一个记录 说明 rst不是记录集的形式只是一条查询结果?? 有什么办法没有让rst是结果集的形式????(searchsql函数运行正常)


问题2:接着我尝试了使用数据环境dataEnvironment 创建的环境叫 DE 由于查询要传一个参数 所以我写了一个存储过程 pro_test 同样的将datacombo控件的DataSource 选为DE datamember选为那个在DE中创建的存储过程pro_test DataField选为存储过程查询的结果字段 ,listfield、databind、rowfield 、rowsource 全都选了该选的 但是运行结果是datacombo控件的下拉列表为空 中断监视了存储过程的执行 结果正常且完整 难道是MSDN中说的那样 存储过程没有返回记录(确实存储过程的定义,顶多返回几个参数(output声明),不可以返回结果集)?? 可是为什么通过rspro_test(其recordset对象) 可以枚举到每一条结果 这些结果又是怎么来的  


  

问题3:问题2我假设是因为存储过程没有返回结果集,所以我又写了一个内嵌表值函数fun_test('')返回值是一个表 然后问题又来了,在数据环境中不可以创建函数的调用 只能创建存储过程 DE中添加子命令时可以找到创建的这个函数 但是在其属性|高级|中显示的嵌入式sql的格式不对,是CALL fun_test ''就是和存储过程的格式一样 这样显然是不对的 内嵌表值函数的执行方式 和查询语句的形式一致的 select * from fun_test('') 自然他那个运行会报错 确实也就报错了




问题4:OK不能用存储过程,也不能用函数,那我在数据环境中创建一个SQL语句的命令,经测试,确实可以作为datacombo的数据源,下拉列表中是全部的查询结果,但是问题又来了,需要的这个查询语句不是无条件的全表查询,当然也不是固定查询条件的查询,就是说要根据用户的输入查询,所以要往查询语句中传参数,可是数据环境中创建的这个SQL语句的命令,只能在设计器中填写,不可以在代码行给其commandtext重新赋值,所以说这个commandtext只能是在设计阶段写死的 大家谁知道怎么在代码行给commandtext重新赋值



问题5:大家在用datacombo时都是用怎样的数据源 有没有简单方便的形式 而不是用麻烦的 adodc

作者: totola147   发布时间: 2011-12-24

假设rs1中的数据是记录中数据,显示的字段Field_s

假设rs2中的数据为目标表的数据 ,既rs2中某个字段Field_x数据来源于rs1

sub form_load
set rs1=cnn.execut(....)'加载rs1数据
set rs2=cnn.execut(....)'加载rs2数据

with datacombo1
set .datasource=rs2
set .rowsource=rs1
.datafield="Field_x"
.listfield="Field_s"
end sub


作者: worldy   发布时间: 2011-12-25

热门下载

更多