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
解决方案 »
- 如何用VB修改一个文件夹的创建时间啊,注意是文件夹,不是文件
- VB自动处理数据的问题
- WebBrowser.Navigate提交繁体中文发贴问题,请高手进来帮忙~
- webbrowser控件的document中,网页内容提取出错
- 怎么样让MSHFlexGrid始终保持单行选择?(在线)
- “*”与“%”的区别问题?
- 代码分析!
- 哪位朋友抽出3分钟时间帮我用VB6.0编一个小小的程序。
- 在VB6.0中 使用SQLDMO.SQLServer 显示数据库名称出错啦, 请大家指点一下
- 关于日期查找
- vb6 怎么一次性修改rs.Fields(0)字段下的所有内容为空
- 我用vs2008做了一个vb程序,是从数据库oracle读取数据
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
我明白关于问题1 我错在哪里了 我把recordset对象 作为数据源了 这样是不对的 应该用一个数据库连接作为数据源(有待测试) GOT IT!!! 哎 还是MSDN看的不够仔细 这个在MSDN里明明写的很清楚 “返回或设置一个数据源,通过该数据源,数据使用者被绑定到一个数据库” 当然recordset对象也可以 但是就会想我之前的那样 只有一行数据 谢谢啦 不过关于您写的 我还是有一点不明白 如果我重新理解的是对的话 那您这样 在程序运行后得到的应该也是一行记录才对 如果我的理解不对的话 那您为什么用两个recordset对象,rst1是rst2的子集,这样光用rst2应该就够了 我没有理解用两个的原因和目的还有 问题2 3 4 我也想知道答案 特别是问题2 和问题4
谢谢!!!
谢谢 之前的理解还是错误的 现在的理解不能说正确 但是已经不是太离谱了
MSDN是好东西 当然CSDN 也是不错的
请问您知道吗
硬编码改成:sConnA="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=xxxDataPathxxx;Persist Security Info=False"(可以作为全剧常量定义)然后在你选择数据库的时候:确定数据库sDBFile 后sConn=replace(sConnA,"xxxDataPathxxx",sDBFile)
conn.activeconnection=scoon
conn.open