Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

交叉表查询应用在窗体查询中时,怎样设置查询代码?

Lee  发表于:2010-06-10 19:11:03  
复制

最近拜读了刘小军先生的《ACCESS窗体查询实例》一文后,自己尝试设计一个交叉查询表的查询窗体,但按刘小军先生所教的方法进行查询代码设置多次都未生效,望各位朋友指点一二。点击下载此附件

 

Top
黎红军 发表于:2010-06-11 08:12:06

strSQL = "TRANSFORM Sum(入库查询.进仓数量) AS 进仓数量之Sum SELECT 入库查询.产品编号 FROM 入库查询 "
strSQL = strSQL & "WHERE(" & strWhere
strSQL = strSQL & ") GROUP BY 入库查询.产品编号 PIVOT Format([进仓日期],'yyyy/mm')"
Me.入库交叉表查询子窗体.SourceObject = ""
Me.入库交叉表查询子窗体.SourceObject = "查询.入库交叉表查询"
如下为交叉查询含参数的势力,供你对比:

PARAMETERS cpbh Text ( 255 ), jcrq DateTime;
TRANSFORM Sum(入库查询.进仓数量) AS 进仓数量之总计
SELECT 入库查询.产品编号
FROM 入库查询
WHERE (((入库查询.产品编号)=[cpbh]) AND ((入库查询.进仓日期)=[jcrq]))
GROUP BY 入库查询.产品编号
PIVOT 入库查询.进仓日期;

 

 



Lee 发表于:2010-06-11 20:18:38
不明白, 能上传个示例吗?

Lee 发表于:2010-06-11 21:40:11

上网查了一下再修改,还是不行。

窗体中有“产品编号”、“进仓日期开始”、“进仓日期结束”三个查询文本框,我现时代码如下:

 

Private Sub 入库查询_Click()

Dim strWhere As String
 Dim qdf As DAO.QueryDef
 Dim strSQL As String

strWhere = ""
If Not IsNull(Me.产品编号) Then
strWhere = strWhere & "([产品编号] like '*" & Me.产品编号 & "*') AND "
    End If
    If Not IsNull(Me.进仓日期开始) Then
strWhere = strWhere & "([进仓日期] >= #" & Format(Me.进仓日期开始, "yyyy-mm-dd") & "#) AND "
    End If
If Not IsNull(Me.进仓日期结束) Then
strWhere = strWhere & "([进仓日期] <= #" & Format(Me.进仓日期结束, "yyyy-mm-dd") & "#) AND "
    End If
If Len(strWhere) > 0 Then
strWhere = Left(strWhere, Len(strWhere) - 5)
    End If

If Len(strWhere) > 0 Then
strSQL = "TRANSFORM Sum(入库查询.进仓数量) AS 进仓数量之Sum SELECT 入库查询.产品编号 FROM 入库查询 "
strSQL = strSQL & "WHERE(" & strWhere
strSQL = strSQL & ") GROUP BY 入库查询.产品编号 PIVOT Format([进仓日期],'yyyy-mm-dd')"
 Else
 strSQL = "TRANSFORM Sum(入库查询.进仓数量) AS 单价之Sum" & _
" SELECT 入库查询.产品编号" & _
 " FROM 入库查询" & _
" GROUP BY 入库查询.产品编号" & _
" PIVOT Format([进仓日期],'yyyy-mm-dd')"
    End If

Set qdf = CurrentDb.QueryDefs("入库交叉表查询")
    qdf.SQL = strSQL
    qdf.Close
   
    Set qdf = Nothing

Me.入库交叉表查询子窗体.SourceObject = ""
Me.入库交叉表查询子窗体.SourceObject = "查询.入库交叉表查询"

End Sub

但查询不能有效运行,请指点一下代码中的问题。

点击下载此附件

wang decheng 发表于:2010-06-12 09:04:31

点击下载此附件

 

有好几处你的错误和上次一样。已经改过来了。查询的代码没有问题,而清除的代码过于简单,你自己看一下



Lee 发表于:2010-06-14 23:12:53
我比较了一下,发现“入库交叉表查询”有所不同,你列标题是“Format([进仓日期],'yyyy\-mm\-dd')”,我想按你那样修改时总是变成“表达式1:Format([进仓日期],'yyyy\-mm\-dd')”,不知何故?另外“入库交叉表查询”的值,你改为“单价之Sum: 进仓数量”,我想应是“进仓数量之Sum: 进仓数量”吧?但这个并不重要。能说一说哪些地方要修改吗?

Lee 发表于:2010-06-15 19:51:48

发现关键问题了,我入库表中原来有些日期例如是:2009-12-5,在交叉表中要转换成2009-12-05,这样才能与代码中的“[进仓日期],'yyyy-mm-dd'”对应,问题是我不知交叉查询表怎样才能自动转换,请问WANG先生你是怎样做到的?我直接把交叉查询表的列标题字段改为“Format([进仓日期],'yyyy-mm-dd'),却总是自动变成列标题是“表达式1:Format([进仓日期],'yyyy-mm-dd'),不知何解,还望再指点一下。



Lee 发表于:2010-06-19 00:03:56
怎么没人回应了?

黎红军 发表于:2010-06-19 07:21:14

真无话可说了,

这个是你的交叉查询代码:

strSQL = "TRANSFORM Sum(入库查询.进仓数量) AS 进仓数量之Sum SELECT 入库查询.产品编号 FROM 入库查询 "
strSQL = strSQL & "WHERE(" & strWhere
strSQL = strSQL & ") GROUP BY 入库查询.产品编号 PIVOT Format([进仓日期],'yyyy/mm')"
Me.入库交叉表查询子窗体.SourceObject = ""
Me.入库交叉表查询子窗体.SourceObject = "查询.入库交叉表查询"

 

下面的是我修正后的代码,你替换掉你原来的sql代码测试。一般来说,测试sql语句可以用查询来检测结果,比较方便。
如下为交叉查询含参数的实例,供你对比:

PARAMETERS cpbh Text ( 255 ), jcrq DateTime;
TRANSFORM Sum(入库查询.进仓数量) AS 进仓数量之总计
SELECT 入库查询.产品编号
FROM 入库查询
WHERE (((入库查询.产品编号)=[cpbh]) AND ((入库查询.进仓日期)=[jcrq]))
GROUP BY 入库查询.产品编号
PIVOT 入库查询.进仓日期;



黎红军 发表于:2010-06-19 07:24:43

交叉表参数查询是需要定义参数条件的:

语句:

PARAMETERS cpbh Text ( 255 ), jcrq DateTime;

即为按你定义的出库编号,进货日期两个条件参数而已。如果有更多的条件,需要先在这个地方定义。



Lee 发表于:2010-06-19 09:33:53

黎先生,我按你的方法修改后,运行查询时显示代码有错误,可能我对VB代码不熟悉有些地方理解错了,请帮我看看问题所在。

 

点击下载此附件

Lee 发表于:2010-06-28 21:00:17

继续回应WANG先生回复的示例。

终于发现问题了(见6楼说明),原来交叉表查询设计视图中不能直接写上字段Format([进仓日期],'yyyy-mm-dd'),在设计视图中应如下操作:

产品编号     进仓日期    进仓数量   Format([进仓日期],'yyyy-mm-dd')

分组          分组        总计             分组

行标题        列标题       值

然后再删掉“进仓日期”字段

产品编号       进仓数量   Format([进仓日期],'yyyy-mm-dd')

分组            总计             分组

行标题            值             列标题

如果不这样,一开始就把“进仓日期”字段改为“Format([进仓日期],'yyyy-mm-dd')”,就会出现之前所说的总是自动变成“表达式1:Format([进仓日期],'yyyy-mm-dd')”的问题来。



Lee 发表于:2010-06-28 21:25:55
请问,如果我在原来的入库交叉表内增加:“计量单位”和“总计进仓数量”(总计进仓数量是统计所查询日期内例如1日-15日,每种产品的进仓总数)两个字段,那上述代码要如何修改?点击下载此附件

总记录:12篇  页次:1/1 9 1 :