设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 7885|回复: 15

请教ADP: 报表记录源

[复制链接]
发表于 2012-9-12 16:24:30 | 显示全部楼层 |阅读模式
MDB中报表记录源可直接为 表名称(如"表1").在ADP中用临时表(#表1)作报表记录源 显示错误:#表1不存在 (#表1 实际是存在的)。请教诸位 临时表作报表记录源该如何操作(详细)?谢谢!!!

点击这里给我发消息

发表于 2012-9-13 12:42:26 | 显示全部楼层
# 临时表的生命周期是一个会话
因此,你的报表记录源不能使用临时表,因为你在打开报表表已经不在一个会话中了。
临时表通常只用于存储过程和触发器

解决方案:
你可以使用存储过程替代临时表。

点击这里给我发消息

发表于 2012-9-13 19:50:01 | 显示全部楼层
你要在存储过程中生成临时表,然后才能SELECT * FROM #表1
 楼主| 发表于 2012-9-13 14:34:47 | 显示全部楼层
zhuyiwen 发表于 2012-9-13 12:42
# 临时表的生命周期是一个会话
因此,你的报表记录源不能使用临时表,因为你在打开报表表已经不在一个会话 ...

朱老师:
    1、创建存储过程:CREATE PROCEDURE 存储过程1 AS SET NOCOUNT ON SELECT * FROM #表1 RETURN
      2、报表记录源设为:存储过程1
      3、打开报表出错:对象名 '#表1' 无效。
   请朱老师耐心指教,谢谢!
 楼主| 发表于 2012-9-15 14:35:33 | 显示全部楼层
zhuyiwen 发表于 2012-9-13 19:50
你要在存储过程中生成临时表,然后才能SELECT * FROM #表1

朱老师,我捣鼓了一天也没有弄出来,请朱老师详解:
【问题:主窗体A内有子窗体B,B的数据源为临时表(#表1[字段a,b,c均为文本]),与B对应的报表为"报表1",点击主窗体上打印按钮,打印报表1】,请朱老师代为写出作为"报表1"记录源的存储过程。谢谢!!!

点击这里给我发消息

发表于 2012-9-17 10:41:29 | 显示全部楼层
再搞不懂临时表如何使用,我就没有办法了

花了我两个小时,帮你做示例。

点击这里给我发消息

发表于 2012-9-17 10:40:04 | 显示全部楼层
#临时表不是普通表,一般来说只在存储过程中产生和使用


如果你在报表中使用,传递窗体上的文本框中的值你要这样用:
首先,你要设计一个存储过程,为了简单起见,这里假设你的窗体上文本框都是文本值,分别对应临时表的a,b,c字段
  1. CREATE PROCEDURE [dbo].[sp_FromFORM] (
  2.         @a nvarchar(50),
  3.         @b nvarchar(50),
  4.         @c nvarchar(50)
  5. ) AS
  6. BEGIN
  7.         SET NOCOUNT ON

  8.         /* 创建临时表 */
  9.         CREATE TABLE #TempTable (
  10.                 [fldA] nvarchar(50),
  11.                 [fldB] nvarchar(50),
  12.                 [fldC] nvarchar(50)
  13.         )

  14.         /* 向临时表中插入值 */
  15.         INSERT #TempTable (
  16.                 [fldA],
  17.                 [fldB],
  18.                 [fldC]
  19.         )
  20.         VALUES (
  21.                 @a,
  22.                 @b,
  23.                 @c
  24.         )

  25.         /* 返回临时表中的记录集 */
  26.         SELECT [fldA], [fldB], [fldC] FROM #TempTable

  27.         /* 临时表 #TempTable 会在存储过程运行结束时自动删除,*/
  28.         /* 不用明确使用 DELETE 删除 */
  29. END
复制代码
再设计窗体, 窗体上放置三个文本框,分别命名为 txtA, txtB, txtC, 最后放置一个打印按钮。如图:

将窗体命名为 frmRpt

在打印按钮事件处理中写入如下代码:
  1. Private Sub cmdPrint_Click()
  2.     DoCmd.OpenReport "rptFromFORM", acViewPreview
  3. End Sub
复制代码
保存窗体。

然后,我们设计报表,如图


设置报表的属性
记录源: sp_FromFORM
数据源标识符为: dbo
输入参数为: @a nvarchar(50)=Forms!frmRpt!txtA, @b nvarchar(50)=Forms!frmRpt!txtB, @c nvarchar(50)=Forms!frmRpt!txtC
如图:


在主体上放置三个文本框,分别将其【控件来源】属性设置为fldA, fldB, fldC

最后,将报表命名为 rptFromFORM, 保存

打开窗体,输入数据,点击按钮,得如下效果:




附上源码:
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2013-3-24 10:10:38 | 显示全部楼层
很好,想看看
发表于 2013-3-24 11:03:53 | 显示全部楼层
学习学习
发表于 2013-5-17 10:01:46 | 显示全部楼层
111
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 00:13 , Processed in 0.102462 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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