起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 509|回复: 8

SUM出来的字段不能表现为数字,导致不能DisplayFormat,急!**

[复制链接]
发表于 2006-3-29 14:12:58 | 显示全部楼层 |阅读模式
我在使用动态SQL语句SELECT INVCODE,SUM(QUANTITY) AS RKMS FROM ST_STOREDETAIL WHERE WHCODE='0001' GROUP BY INVCODE 查询出数据放到数据集中,而后使用下面的语句动态实现:报错如下

针对RKMS(入库米数),其数据类型为何是字符型?
AField.DataType = Business.Model.TDataType.dtString

导致我在执行下一句时出错
AField.EditStyleID := 'Number'; //设置表现类型为数字

错误信息如下:
---------------------------
Justep Business Studio
---------------------------
运行我的报表的时候发生异常:字段RKMS不能表现为数字

类型:Exception。
---------------------------
确定   
---------------------------
回复

使用道具 举报

发表于 2006-3-29 14:43:15 | 显示全部楼层
我做了一个
SELECT GZSJLX.ID, SUM(GZSJLX.SZ) as sss
  FROM GZSJLX
  GROUP BY GZSJLX.ID

在功能中,  Dialogs.Showmessage(SysUtils.IntToStr(Integer(DataSetBroker1.DataSet.FieldByName('sss').DataType)));
显示为 8
对应第8个是ftBCD类型,不是楼主说的ftString
type TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString, ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd);
回复 支持 反对

使用道具 举报

发表于 2006-3-29 15:20:12 | 显示全部楼层
楼上用了 数字类型,返回是 8 ftBCD
如果是 浮点数,返回是 6 ftFloat
如果是 整数, 返回是 3 ftInteger
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-29 15:21:28 | 显示全部楼层
你试一下系统表中select FGUID,counT(FGUID) as icount,max(ffileguid) as FFILEGUID,mIN(ffileguid) as MIN_FFILEGUID
  ,MAX(FFILENAME) AS MAX_FFILENAME,MIN(FFILENAME) AS MIN_FFILENAME
  from tvssfilesystem WHERE 1=1 GROUP BY FGUID

我在STUDIO中没法对该统计字段 设置表现类型为 数字

我试过了,在STUDIO中所有统计(SUM等)出来的字段,把它加到用户字段后,去设置表现类型时,没有数字可选。如果不加统计,该字段是可选择数字的;

急,用户要打印,繁请尽快解决!
回复 支持 反对

使用道具 举报

发表于 2006-3-29 15:34:22 | 显示全部楼层
你在Studio中不可以这样,代码中可以
procedure AddUserField(ADataSet: TBizDataSet; AId, ADisplayName: String);
begin
  with TUserDataField.Create(ADataSet) do
  begin
    DataSet := ADataSet;
    ID := AID;
    DataType := TDataType.dtInteger;
    EditStyleID := 'Number';
    DisplayFormat := '0.0';
    if ADisplayName > ' ' then
      DisplayName := ADisplayName;
end;
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
  DataSetBroker1.DataSet.Close;
  AddUserField(TBizDataSet(DataSetBroker1.DataSet), 'icount', '统计');
  DataSetBroker1.DataSet.Open;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-29 16:58:02 | 显示全部楼层
如此说来,针对STUDIO中事先知道的SQL语句(含SUM等),
这些SUM字段没法在设计时指定其表现类型,和显示格式(例displayformat=0.000),
但是可动态写代码实现,是这样吗?我试试

在增加用户字段的代码中,下面一句
DataType := TDataType.dtInteger;  这句必须要设置吗?
否则会测试到该字段为dtString. ?
回复 支持 反对

使用道具 举报

发表于 2006-3-29 17:22:05 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-30 14:10:42 | 显示全部楼层
你的方法可以满足我的需求,但是该解决方案涉及添加用户字段,你们的平台对该段代码有 明显的速度的问题。希望尽快改进!
回复 支持 反对

使用道具 举报

发表于 2011-1-10 17:03:33 | 显示全部楼层
挺啊
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-23 18:32 , Processed in 0.037295 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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