Office中国论坛/Access中国论坛

标题: 请问如何用代码生成包含DSUM的交叉表查询TRANSFORM? [打印本页]

作者: fatmingli    时间: 2018-1-9 13:41
标题: 请问如何用代码生成包含DSUM的交叉表查询TRANSFORM?
本帖最后由 fatmingli 于 2018-1-9 13:53 编辑

问题如下[attach]62394[/attach]
Sub CSQL()
  A =Screen.ActiveForm.Name  '   获取当前窗体名称
  Dim qdfAs DAO.QueryDef
  Dimstrsql
  strsql ="TRANSFORM DSum(成交数量, " & A & ",证券代码='002489') AS 成本价格 SELECT "& A & ".发生日期 FROM " & A & " WHERE(((" & A & ".证券代码) = '"& Forms(A)!Text2 & "')) GROUP BY " & A & ".发生日期 PIVOT [证券代码] & [证券名称];"
  Set qdf =CurrentDb.QueryDefs("成本分析查询")
  qdf.SQL =strsql
   DoCmd.OpenForm "成本曲线图"
End Sub

运行后生成的成本分析查询“” SQL语句是
TRANSFORM DSum(成交数量,交易记录,证券代码='002489') AS 成本价格
SELECT 交易记录.发生日期
FROM 交易记录
WHERE (((交易记录.证券代码)='002489'))
GROUP BY 交易记录.发生日期
PIVOT [证券代码] & [证券名称];

我检查后发现DSUM语句不正确,查询不能正常运行,
正确的DSUM是有双引号的,正确的SQL语句是
TRANSFORM DSum("成交数量","交易记录","证券代码='002489'") AS 成本价格
SELECT 交易记录.发生日期
FROM 交易记录
WHERE (((交易记录.证券代码)='002489'))
GROUP BY 交易记录.发生日期
PIVOT [证券代码] & [证券名称];

请问要如何修改这段代码,才能生成正确的SQL语句,我对这些符号格式实在头痛
  strsql ="TRANSFORM DSum(成交数量, " & A & ",证券代码='002489') AS 成本价格 SELECT "& A & ".发生日期 FROM " & A & " WHERE(((" & A & ".证券代码) = '"& Forms(A)!Text2 & "')) GROUP BY " & A & ".发生日期 PIVOT [证券代码] & [证券名称];"
谢谢


作者: fatmingli    时间: 2018-1-9 15:29
本帖最后由 fatmingli 于 2018-1-9 16:08 编辑

在试验了无数次后,没问题了,加 "" 就可以了,谢谢啦以下代码,供有需要的人参考
  strsql = "TRANSFORM iif(DSum(""成交数量"",""" & A & """,""发生日期<='""" & " & [发生日期] & " & """' and 证券代码='" & Forms(A)!Text2 & "'"")<>0,-DSum(""发生金额"",""" & A & """,""发生日期<='""" & " & [发生日期] & " & """' and 证券代码='" & Forms(A)!Text2 & "'"")/DSum(""成交数量"",""" & A & """,""发生日期<='""" & " & [发生日期] & " & """' and 证券代码='" & Forms(A)!Text2 & "'"")) AS 成本价格 SELECT " & A & ".发生日期 FROM " & A & " WHERE (((" & A & ".证券代码) = '" & Forms(A)!Text2 & "')) GROUP BY " & A & ".发生日期 PIVOT [证券代码] & [证券名称];"



作者: roych    时间: 2018-1-18 00:29
如果有问题。麻烦发附件。别让大家为你的脚本调试去创建一个或几个数据表。




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