设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[窗体] 如何在子窗体里显示带参数的结果列数不定的存储过程的结果

[复制链接]
跳转到指定楼层
1#
发表于 2005-11-28 16:11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我有一带参数存储过程,想在子窗体里显示结果,参数由主窗体接受.由于我的结果列数不定(交叉表),我要怎么样做,才可以达到在主窗体输入参数,子窗体中显示运行结果/
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2005-11-28 19:23:00 | 只看该作者
请前辈出招!给个思路也行啊。
3#
发表于 2005-11-29 23:23:00 | 只看该作者
把存储过程的结果生成新表
4#
 楼主| 发表于 2005-11-30 21:59:00 | 只看该作者
楼上兄弟说的是临时表吗?我那的列数不定,我怎么定义这个临时表呢?
5#
发表于 2005-11-30 22:26:00 | 只看该作者
定义到最大列数,如果列数很大就不适合用这种做法。
6#
发表于 2005-12-1 19:19:00 | 只看该作者
我的做法是用存儲過程生成一個查詢或新存儲過程

再將子窗體的源物件設成查詢或新存儲過程即可.

如:

主窗全查詢鈕事件:

        CurrentProject.Connection.Execute ("EXEC spdBomPeggingUpdate @q1='" & Me.C2Text.Text & "'")

Me.list1.SourceObject = "預存程序spdCostTotal"(這是你用存儲過程生成或修改的查詢或新存儲過程,如"視圖.qryBomContract")

存儲過程為:

Alter PROCEDURE spdBomPeggingUpdate
@q1 nvarchar(25)='%'
AS
DECLARE @sql varchar(2500)
SET NOCOUNT ON
SET @sql='Alter VIEW qryBomPegging AS '
SET @sql=@sql+'SELECT  TOP 100 PERCENT BD.子編號,IM.品名,IM.規格,IM.單位,BD.ParentID '
SET @sql=@sql+' FROM             dbo.tabBomDetail BD INNER JOIN  '
SET @sql=@sql+'      dbo.tabItemMaster IM ON '
SET @sql=@sql+'      BD.子編號 = IM.編號 INNER JOIN '
SET @sql=@sql+'      dbo.tabItemMaster IM1 ON BD.ParentID = IM1.編號 '
SET @sql=@sql+' WHERE IM1.展開 = 1 AND BD.子編號 LIKE ''%' [url=mailto:+@q1+'%''']+@q1+'%'''[/url]
SET @sql=@sql+'  ORDER BY BD.子編號 '
SET NOCOUNT OFF
EXEC (@sql)
RETURN

如要生成交叉查詢表,可用如下存儲過程:

Alter PROCEDURE spdCostTotalUpdate
@inputtext varchar(100)
AS
SET NOCOUNT ON
DECLARE @sql nvarchar(2500)
DECLARE @temp1 nvarchar(20)

SELECT DISTINCT 材料分類
INTO #tabCostClassification_temp
FROM qryCostDetail

SELECT @sql='Alter Procedure spdCostTotal'
SELECT @sql=@sql+' As SELECT 說明,ParentID, 品名, 規格, 單位,修改日期,SUM(金額) AS 合計,'
WHILE  (0=0)
BEGIN
IF EXISTS(SELECT * FROM #tabCostClassification_temp)
  BEGIN
   SELECT @temp1=材料分類
   FROM #tabCostClassification_temp
--   ORDER BY 編號 DESC
   SET @sql=@sql+'  SUM(CASE 材料分類 WHEN ''' + @temp1 + ''' THEN 金額 ELSE NULL END) AS ' + @temp1 +' ,'
   DELETE FROM #tabCostClassification_temp
   WHERE 材料分類=@temp1
  END
ELSE
BREAK
END

SET @sql=LEFT(@sql,LEN(@sql)-1)+' FROM dbo.qryCostDetail '
SET @sql=@sql+@inputtext
SET @sql=@sql+'  GROUP BY  說明,ParentID, 品名, 規格, 單位,修改日期 '
SET @sql=@sql+'  ORDER BY ParentID'
SET NOCOUNT OFF
EXEC (@sql)
RETURN


這樣夠詳細,夠清楚了吧...

我也是弄了好久也成功的...

嘿嘿....
7#
 楼主| 发表于 2006-2-16 20:58:00 | 只看该作者
前辈的招果然可用,然而当参数改变导致列数改变,列名改变时,显示的是第一次参数的结果,要重新连接才可以显示正确的结果。有没有什么好的办法?

点击这里给我发消息

8#
发表于 2006-2-17 19:33:00 | 只看该作者
以下是引用ADAM在2005-12-1 11:19:00的发言:


我的做法是用存儲過程生成一個查詢或新存儲過程

再將子窗體的源物件設成查詢或新存儲過程即可.



好方法!其实不止如此,“子窗體的源物件”还可以是表、视图等等。
9#
 楼主| 发表于 2006-2-17 22:28:00 | 只看该作者
zhuyiwen版主,我说的那个问题,你能帮我解决下吗?
10#
发表于 2006-2-18 18:33:00 | 只看该作者
用DataGrid控件也可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-3 05:39 , Processed in 0.090287 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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