我将所需的记录查询出来后,怎么将每一条记录填入每个单独的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)')
中查询出来的。
如果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)')
中查询出来的。
查询出的数据集有三个字段: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的总和
小写金额转大写控件没有,不过我有一个存储过程,你到是可以看一下
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
我找到一个例子,可不知道在哪用它。大家教我。
=====================================================================
类 别: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;