我将所需的记录查询出来后,怎么将每一条记录填入每个单独的QRLABLE中?
如果QRLABLE不行,应该用什么?我现在用了个最笨的方法:用一个COMBOBOX,将数据集中的记录传到COMBOBOX的ITEM中,用QRLABLE1.capion:=combobox.item[0]....等。有好的方法吗?还有如果全用有16条记录,但有时只用了8、9条,怎么控制让它们自动排列?什么控件能将小写金额改成大写?
还有,QRExpr中的函数中不能用查询出来的合计字段?如:SUM(hj)//hj是adoquery.sql.add('select name,sl,format(sum(je),0.00)')
 中查询出来的。

解决方案 »

  1.   

    我是说出来这样的效果:
     查询出的数据集有三个字段:name、sl和zje
    排列时要这样:
       name1   sl1   zje1          name5    sl5    zje5
       name2   sl2   zje2          name6    sl6    zje6
       name3   sl3   zje3          name7    sl7    zje7
       name4   sl4   zje4          name8    sl8    zje8          壹仟叁佰伍拾元叁角整            1350.30//此值为所有ZJE的总和
      

  2.   

    怎么分栏打印?我用的是QREPORT.
      

  3.   

    象你那样还不如直接写了
    小写金额转大写控件没有,不过我有一个存储过程,你到是可以看一下
    CREATE Procedure dbo.ELZU (@n_LowerMoney numeric(15,2),@v_TransType int,@RETURNs VARCHAR(200)  output) AS 
    BEGIN 
    Declare @v_LowerStr VARCHAR(200) -- 小写金额 
    Declare @v_UpperPart VARCHAR(200) 
    Declare @v_UpperStr VARCHAR(200) -- 大写金额
    Declare @i_I int
    --Declare @v_TransType int
    --set @v_TransType=0
    set @v_LowerStr = LTRIM(RTRIM(ROUND(@n_LowerMoney,3))) --四舍五入为指定的精度并删除数据左右空格
    set @i_I = 1
    set @v_UpperStr = ''while ( @i_I <= len(@v_LowerStr))
    begin
    select @v_UpperPart = case substring(@v_LowerStr,len(@v_LowerStr) - @i_I + 1,1)
    WHEN '.' THEN '元'
    WHEN '0' THEN '零'
    WHEN '1' THEN '壹'
    WHEN '2' THEN '贰'
    WHEN '3' THEN '叁'
    WHEN '4' THEN '肆'
    WHEN '5' THEN '伍'
    WHEN '6' THEN '陆'
    WHEN '7' THEN '柒'
    WHEN '8' THEN '捌'
    WHEN '9' THEN '玖'
    END

    case @i_I
    WHEN 1 THEN '分'
    WHEN 2 THEN '角'
    WHEN 3 THEN ''
    WHEN 4 THEN ''
    WHEN 5 THEN '拾'
    WHEN 6 THEN '佰'
    WHEN 7 THEN '仟'
    WHEN 8 THEN '万'
    WHEN 9 THEN '拾'
    WHEN 10 THEN '佰'
    WHEN 11 THEN '仟'
    WHEN 12 THEN '亿'
    WHEN 13 THEN '拾'
    WHEN 14 THEN '佰'
    WHEN 15 THEN '仟'
    WHEN 16 THEN '万'
    ELSE ''
    END
    set @v_UpperStr = @v_UpperPart + @v_UpperStr
    set @i_I = @i_I + 1
    endif ( 0 = @v_TransType)
    begin
    set @v_UpperStr = REPLACE(@v_UpperStr,'零拾','零') 
    set @v_UpperStr = REPLACE(@v_UpperStr,'零佰','零') 
    set @v_UpperStr = REPLACE(@v_UpperStr,'零仟','零') 
    set @v_UpperStr = REPLACE(@v_UpperStr,'零零零','零')
    set @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
    set @v_UpperStr = REPLACE(@v_UpperStr,'零角零分','整')
    set @v_UpperStr = REPLACE(@v_UpperStr,'零分','整')
    set @v_UpperStr = REPLACE(@v_UpperStr,'零角','零')
    set @v_UpperStr = REPLACE(@v_UpperStr,'零亿零万零元','亿元')
    set @v_UpperStr = REPLACE(@v_UpperStr,'亿零万零元','亿元')
    set @v_UpperStr = REPLACE(@v_UpperStr,'零亿零万','亿')
    set @v_UpperStr = REPLACE(@v_UpperStr,'零万零元','万元')
    set @v_UpperStr = REPLACE(@v_UpperStr,'万零元','万元')
    set @v_UpperStr = REPLACE(@v_UpperStr,'零亿','亿')
    set @v_UpperStr = REPLACE(@v_UpperStr,'零万','万')
    set @v_UpperStr = REPLACE(@v_UpperStr,'零元','元')
    set @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
    end-- 对壹元以下的金额的处理 
    if ( '元' = substring(@v_UpperStr,1,1))
    begin
    set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
    endif ( '零' = substring(@v_UpperStr,1,1))
    begin
    set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
    endif ( '角' = substring(@v_UpperStr,1,1))
    begin
    set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
    endif ( '分' = substring(@v_UpperStr,1,1))
    begin
    set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
    endif ('整' = substring(@v_UpperStr,1,1))
    begin
    set @v_UpperStr = '零元整'
    end
    set @RETURNs= @v_UpperStr
    END
    GO
      

  4.   

    我用的是ACCESS,没法用存储过程啊。
    我找到一个例子,可不知道在哪用它。大家教我。
    =====================================================================
    类 别:API
    我看过了站内的两篇关于将数字转换为符合使用习惯的大写金额的文章,感觉编写思路不够清晰,晦涩难懂,于是自己重新写了一段代码,只有36行代码。请大家批评指正。
    function TForm1.NumToChnStr(Value: Real; ClearZero: Boolean): String;
    const
      ChnUnit: array[0..13] of string = ('分', '角', '元', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟');
      ChnNum : array[0..9]  of string = ('零', '壹','贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
    var
      I: Integer;
      StrValue, StrNum: String;
      ValueLen: Integer;
    begin
      if Value 《= 0 then
      begin
        Result := '输入参数应大于零。';
        Exit;
      end;
      StrValue := IntToStr(Round(Value * 100));
      ValueLen := Length(StrValue);
      Result := '';
      for I := 1 to ValueLen do
      begin
        StrNum := StrValue[I];
        Result := Result + ChnNum[StrToInt(StrNum)] + ChnUnit[ValueLen - I];
      end;
      if ClearZero then
      begin
        Result := StringReplace(Result, '零分', '',   [rfReplaceAll]);
        Result := StringReplace(Result, '零角', '',   [rfReplaceAll]);
        Result := StringReplace(Result, '零元', '元', [rfReplaceAll]);
        Result := StringReplace(Result, '零拾', '',   [rfReplaceAll]);
        Result := StringReplace(Result, '零佰', '',   [rfReplaceAll]);
        Result := StringReplace(Result, '零仟', '',   [rfReplaceAll]);
        Result := StringReplace(Result, '零万', '万', [rfReplaceAll]);
      end;
    end;
     
      

  5.   

    这个怎么用啊?如果我想这样:EDIT1.text:=?或QRLABLE1.caption:=?