Office中国论坛/Access中国论坛

标题: 如何在子窗体里显示带参数的结果列数不定的存储过程的结果 [打印本页]

作者: julycy    时间: 2005-11-28 16:11
标题: 如何在子窗体里显示带参数的结果列数不定的存储过程的结果
我有一带参数存储过程,想在子窗体里显示结果,参数由主窗体接受.由于我的结果列数不定(交叉表),我要怎么样做,才可以达到在主窗体输入参数,子窗体中显示运行结果/
作者: julycy    时间: 2005-11-28 19:23
请前辈出招!给个思路也行啊。
作者: laomao    时间: 2005-11-29 23:23
把存储过程的结果生成新表
作者: julycy    时间: 2005-11-30 21:59
楼上兄弟说的是临时表吗?我那的列数不定,我怎么定义这个临时表呢?
作者: tz-chf    时间: 2005-11-30 22:26
定义到最大列数,如果列数很大就不适合用这种做法。
作者: ADAM    时间: 2005-12-1 19:19
我的做法是用存儲過程生成一個查詢或新存儲過程

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

如:

主窗全查詢鈕事件:

        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


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

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

嘿嘿....
作者: julycy    时间: 2006-2-16 20:58
前辈的招果然可用,然而当参数改变导致列数改变,列名改变时,显示的是第一次参数的结果,要重新连接才可以显示正确的结果。有没有什么好的办法?
作者: zhuyiwen    时间: 2006-2-17 19:33
以下是引用ADAM在2005-12-1 11:19:00的发言:


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

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



好方法!其实不止如此,“子窗體的源物件”还可以是表、视图等等。
作者: julycy    时间: 2006-2-17 22:28
zhuyiwen版主,我说的那个问题,你能帮我解决下吗?
作者: yodong    时间: 2006-2-18 18:33
用DataGrid控件也可以




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3