起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 783|回复: 32

透视数据集定义SQL 报错?**

[复制链接]
发表于 2009-5-7 10:17:54 | 显示全部楼层 |阅读模式
Const sSQL = 'SELECT TJHB.JHND AS "计划年度",%s TJHB.JHFL AS "计划分类", '
           + 'TXMB.BZBM AS "编制部门", TXMB.XMZT AS "项目状态", '
           + 'COUNT(TXMB.XMMC) AS "个数", SUM(TXMB.JHFY) AS "计划费用", '
           + 'SUM(TXMB.JSJE) AS "结算金额"  FROM TXMB, TJHB, TJHXMQD '
           + 'WHERE TJHB.XH = TJHXMQD.JHXH and TJHXMQD.XMXH = TXMB.XH '
           + 'GROUP BY TJHB.JHND, TJHB.JHJD, TJHB.JHFL, TXMB.BZBM, TXMB.XMZT '
           + 'ORDER BY TJHB.JHND, TJHB.JHJD, TJHB.JHFL, TXMB.BZBM, TXMB.XMZT ';
       sSQL2 = ' TJHB.JHJD AS "计划季度", ';
       sSQL3 = ' TJHB.JHYD AS "计划月度", ';
var
  tmpSQL :String;
begin
  Case Index of
    0 : tmpSQL := SysUtils.Format(sSQL,['']);
    1 : tmpSQL := SysUtils.Format(sSQL,[sSQL2]);
    2 : tmpSQL := SysUtils.Format(sSQL,[sSQL3]);
  end;

  dsbJDTJ.DataSet.Close;
  TPivotDataSet(dsbJDTJ.DataSet).DecisionDef.SQL := tmpSQL ;
  dsbJDTJ.DataSet.Open;


如上代码,报下面错误:

1.gif

7.4 KB, 下载次数: 241

回复

使用道具 举报

发表于 2009-5-7 10:23:11 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-7 10:37:21 | 显示全部楼层
with TPivotDataSet(dsbJDTJ.DataSet) do
  begin
    Close;
    DecisionDef.SQL := tmpSQL;
    Open;
  end;

按这样写了 还是报上面错误,是不是SQL语句不对啊
回复 支持 反对

使用道具 举报

发表于 2009-5-7 10:39:32 | 显示全部楼层
你1楼的sql是生成后的sql而不是原始的sql语句吧?
你想通过代码控制行维列维的话,可以看看DataSetTSSJJ1.DecisionDef.DimensionDefs这个属性
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-7 11:01:15 | 显示全部楼层
能否给个具体代码。
如已经有A,B,C 3个行维了 ,想在A后面加1个D行维 ,如何写?
回复 支持 反对

使用道具 举报

发表于 2009-5-7 11:07:05 | 显示全部楼层
类似于这样子:

with DataSetTSSJJ1.DecisionDef.DimensionDefs.Add do
  begin
    TableName := 'SJJ_WZKCB';
    FieldType := TFieldType.ftString;
    FieldName := 'KF';
    Origin := 'KF';
    DisplayName := '库房';
    IsPrimaryKey := True;
    IsAgg := False;
    DimStyleDefType := TDecisionDimStyleDefType.dfRowDim;
    DimType := TDecisionDimType.dtDataDim;
    ShowSubTotal := False;
    CustomDim.FieldType := TCustomDimType.cdtString;
    BinType := TBinType.binNone;
  end;

注意要关掉数据集哦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-7 11:44:58 | 显示全部楼层
procedure TXMZTTJDoc.InitDimensionDefs(pDataSet:TPivotDataSet;iFlag:Integer);
begin
  pDataSet.Close;
  pDataSet.DecisionDef.DimensionDefs.Clear;

  with pDataSet.DecisionDef.DimensionDefs.Add do
  begin
    TableName := tName;
    FieldType := TFieldType.ftString;
    FieldName := fName;
    Origin := fName;
    DisplayName := dName;
    ShowSubTotal := bTotal;                //是否小计

    IsAgg := False;
    IsPrimaryKey := True;
    BinType := TBinType.binNone;
    DimType := TDecisionDimType.dtDataDim;
    CustomDim.FieldType := TCustomDimType.cdtString;
    if iFlag = 0 then   //行维
      DimStyleDefType := TDecisionDimStyleDefType.dfRowDim
    else               //列维
      DimStyleDefType := TDecisionDimStyleDefType.dfColDim;
  end;
end;

如上代码,执行到第2句  还是报1楼的错误。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-7 11:55:37 | 显示全部楼层
按照 http://bbs.justep.com/forum.php? ... light=DimensionDefs 这9楼的方法
:在DataSetTSSJJ1.Close; 后面加上:
DataSetTSSJJ1.DecisionDef.BeginUpdate;
try

在 DataSetTSSJJ1.Open;前加:
  finally
    DataSetTSSJJ1.DecisionDef.EndUpdate;
  end;

在DataSetTSSJJ1.DecisionDef.EndUpdate; 这句报1楼的错误
回复 支持 反对

使用道具 举报

发表于 2009-5-7 12:56:30 | 显示全部楼层
不可能吧,我这边试了一下,没什么问题呀。
不应该报1楼的错误吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-7 12:59:46 | 显示全部楼层
TPivotDataSet(dsbJDTJ.DataSet).Close;
  try
    TPivotDataSet(dsbJDTJ.DataSet).DecisionDef.BeginUpdate;
    InitDimensionDefs(TPivotDataSet(dsbJDTJ.DataSet),Index);    //初始化行维 函数
    TPivotDataSet(dsbJDTJ.DataSet).DecisionDef.SQL := tmpSQL;   
  finally
    TPivotDataSet(dsbJDTJ.DataSet).DecisionDef.EndUpdate;
  end;
  TPivotDataSet(dsbJDTJ.DataSet).Open;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-21 05:49 , Processed in 0.042655 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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