求助-----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
我的问题是
关于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
假设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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28