设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2995|回复: 6
打印 上一主题 下一主题

请教各位高手,如何把组合框的记录源设置成一个存储过程,该存储过程的参数是另一控件

[复制链接]
跳转到指定楼层
1#
发表于 2004-10-26 08:16:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
同上
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2004-10-26 18:18:00 | 只看该作者
在 MDB 中,“组合框”或“列表框”的“行来源”可以用SQL语句或查询,SQL语句或查询可以引用窗体控件或变量,用 Me.组合框.Requery 可以擦新“行来源”使列表内容更新。

但在 ADP 中,“行来源”不能像 MDB 那样引用窗体控件,又没有像窗体的“输入参数”,只能用“Recordset”。1;可以在窗体中建一个“子过程”调用有参数的“存储过程”或“函数”引用窗体控件,赋值所有的“组合框”或“列表框”的“Recordset”2;在窗体的“加载”事件调用“子过程”赋值“组合框”或“列表框”的“Recordset”3;在“组合框”或“列表框”的“更新后”调用“子过程”赋值所有的“Recordset”如上,可以做到比 MDB 那样的方法 更快。调用“存储过程”或“函数”比发送SQL语句更快。

赋值“Recordset”比擦新“行来源”更快。

在“更新后”事件先擦新“子窗体”“记录源”再擦新“组合框”或“列表框”的“Recordset”更好。

在 MDB 中同样可以用这种方法。Me.Combox.Recordset =[em01]
3#
发表于 2004-10-26 18:24:00 | 只看该作者
在 ADP 中用 VBA 代码调用有参数“存储过程”和“函数”:『当前』.『连接』.『执行』(参数)

CurrentProject.Connection.Execute ("dbo.存储过程  " & 控件1 & ",'" & 控件2 & "'," & 控件3)

用这种方法可以在 ADP 的 VBA 调用“存储过程”和“SQL函数”时用“控件”或“变量”传递参数,

编辑“存储过程”时,记得在“属性”调整参数顺序和数据类型,“从上到下”对应“从左到右”,

“字符”参数要用单引号''括住,如‘控件2’和‘参数2’,“货币”和“数值”不要用单引号括住。

如果“存储过程”或“函数”设置了默认参数,在调用时缺少参数就会用默认值,如果没有设置默认值,就会弹出对话框,要求输入参数。

还可以用这种方法执行“动态SQL”语句时传递参数。

在 T-SQL 语句中,没有 iif() 函数,IsNull(判断,返回)有两个参数,不同 VBA 函数,传给 SQL2000 时

要分清楚那部分在 VBA 运行,那部分在 SQL2000 运行。



代替“域聚合函数”用“GetString”方法从“Recordset”返回一个字符串。

注意:返回的“字符串”尾附加回车符。存入表再取出来 对比 不相等。

[控件] = CurrentProject.Connection.Execute("dbo.存储过程  " & 参数1 & ",'" & 参数2 & "'," & 参数3).GetString



在“组合框”的行来源,没有“输入参数”,要引用控件,可以用记录集:(“存储过程”不能作为表。)

Set Me.Combox.Recordset = CurrentProject.Connection.Execute("SELECT 地区 FROM dbo.函数(" & 控件1 & ",'" & 控件2 & "'," & 控件3 & ") GROUP BY 地区")

[此贴子已经被作者于2004-10-26 10:43:46编辑过]

4#
 楼主| 发表于 2004-10-27 01:16:00 | 只看该作者
谢谢指教!
5#
发表于 2004-11-6 19:13:00 | 只看该作者
多謝!我也搭上羅、嘻嘻!
6#
发表于 2005-4-16 01:35:00 | 只看该作者

请教有语法错误!

Private Sub 产品代号_AfterUpdate()
Me.组合18.Recordset = CurrentProject.Connection.Execute("dbo.qry单产品在库查询, " & 产品代号 & "")
End Sub

qry单产品在库查询 存储过程中设定了参数 @产品查询代号

ALTER PROCEDURE dbo.qry单产品在库查询
(@产品查询代号 nvarchar)
AS SELECT dbo.tbl在库.产品代号, dbo.tbl在库.批号,
      SUM(CASE WHEN dbo.tbl在库.[入库?] = 0 THEN - 1 * dbo.tbl在库.单箱 * dbo.tbl在库.箱数
       ELSE dbo.tbl在库.单箱 * dbo.tbl在库.箱数 END) AS 在库数量
FROM dbo.tbl在库 where (dbo.tbl在库.产品代号=@产品查询代号)
GROUP BY dbo.tbl在库.批号, dbo.tbl在库.产品代号
ORDER BY  dbo.tbl在库.产品代号, dbo.tbl在库.批号


为何显示第一行 "," 附件有语法错误!

7#
发表于 2005-4-25 03:07:00 | 只看该作者
产品查询代号 nvarchar(50)--设定大小
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-6-4 12:41 , Processed in 0.100569 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表