大小写代码运行问题 |
答題得分者是:supman
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
var
printform: Tprintform;
s:string;
implementation
uses sf;
{$R *.dfm}
function zStrFormat(Format,Str,Mode:String):String;overload;
var
Len1,Len2:Integer;
TempStr:String;
begin
Len1:=Length(Format);
Len2:=Length(Str);
TempStr:=Copy(Format,1,Len1-Len2);
if (Mode='LeftJustify') then TempStr:=Str TempStr;
if (Mode='RightJustify') then TempStr:=TempStr Str;
result:=TempStr;
end;
procedure Tprintform.FormShow(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from tb_sf where 票据号=' sfform.Label3.Caption);
ADOQuery1.Open ;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select * from tb_sf where 票据号=' sfform.Label3.Caption);
ADOQuery2.SQL.Add(' and 应收金额<>0');
ADOQuery2.Open ;
end;
//打印
procedure Tprintform.Button1Click(Sender: TObject);
begin
frxReport1.LoadFromFile('mzsf.fr3');
frxReport1.PrepareReport;
frxReport1.ShowPreparedReport;
printform.Close ;
end;
procedure Tprintform.Button2Click(Sender: TObject);
begin
printform.Close;
end;
procedure Tprintform.frxReport1GetValue(const VarName: String;
var Value: Variant);
var
S1,Result:String;
i,Num:integer;
begin
S1:= s;
Result:='';
S1:=StringReplace(S1,'.','',[rfReplaceAll]);
S1:=zStrFormat('0000000',S1,'RightJustify');
for i:=1 to Length(S1) do
begin
Num:=StrToInt(S1[i]);
Case Num Of
0:Result:=Result '零 ';
1:Result:=Result '壹 ';
2:Result:=Result '貳 ';
3:Result:=Result '參 ';
4:Result:=Result '肆 ';
5:Result:=Result '伍 ';
6:Result:=Result '陸 ';
7:Result:=Result '柒 ';
8:Result:=Result '捌 ';
9:Result:=Result '玖 ';
end;
end;
//fastreport momo中取得变量值(显示大写金额)
frxReport1.Script.Variables['aa']:=Result;
end;
procedure Tprintform.ADOQuery2AfterOpen(DataSet: TDataSet);
begin
//这是取得小写金额的数据
s:= Format('%.2f',[ ADOQuery2.Fieldbyname('应收金额').AsFloat]);
end;
end.
问题:本代码在初次运行时(即打印第一张票时),大写金额完全正常)但接着收第二张票时(每打印一次打印窗口显示一次),其它的数字都变成当前第二张的,但大写金额还是第一张的数字。
------
我的编程起步于ktop,我将永远支持ktop |
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
您好:
您要將您列印的那一段原始碼也秀出來才知道,因為從您貼的程式碼上看不到哪裡呼叫了frxReport1GetValue,也許您根本沒有呼叫,或者Report的DataSet沒有去指定,他才會永遠印第一次的數據,如果您是在
procedure Tprintform.ADOQuery2AfterOpen(DataSet: TDataSet);
begin
//这是取得小写金额的数据
s:= Format('%.2f',[ ADOQuery2.Fieldbyname('应收金额').AsFloat]);
end;
只有在這去取得金額的數據也不對,因為Open只有一次,所以你只會抓到第一筆的值,你應該要寫報表的在BeforePrint事件裡面.
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |