procedure TwRapor.frxReportGetValue(const VarName: String;
var Value: Variant);
begin
if VarName = '[frxDBDataset1."B_MEDENIHAL"]' then
begin
if field.değer = 0 then Value := 'Bekar';
if field.değer = 1 then Value := 'Evli';
.....
end;
end;
ama 3.10 sürümünde ongetvalue olayına sadece değişkenler geliyor.Ve bu bir değişken olmadığından istediğim şeyi yazamıyorum.tabiki fastreportta bir değişken tanımlayarak bu işlemi yapabiliyorum.Ama delphiden yapmak istiyorum çünkü bir sürü rapor var.Her rapora tek tek değişken tanımlamadan sadece field ismine bakarak istediğim işlemi (delphi tarafında) nasıl yapabilirim?
fieldları statik olarak yaratmıyorum ve aynı dataseti birbirinden farklı sql leri çalıştırmak için kullanıyorum.bu yüzden calculated field eklyemem.
ilginiz için teşekkür ederim.
frxReport'un DoGetValue methaduna gelen parametre eğer bir veritabanı alanı ise burada gerekli işlemler yapılarak en son exit komutu ile çıkıyormuş.işlem sistem değişkenleri içinde geçerli.ben de bu methada bir koşul ekleyerek problemi çözdüm.eklediğim koşul eğer frxReport un tagı 0 dan küçükse exit komutunun çalışmamasını sağlamak.tabi isteyenler ifdef ekleyerek veya farklı mantıklarla da yapabilirler.şimdilik yapabildiğim bu.daha iyi fikirlerinizi bekliyorum.ilgilenenler içinde dogetvalu methadunu aşağıya kopyalıyorum.iyi çalışmalar.
function TfrxReport.DoGetValue(const Expr: String; var Value: Variant): Boolean;
var
i: Integer;
ds: TfrxDataSet;
fld: String;
v: TfsCustomVariable;
val: Variant;
begin
Result := False;
Value := Null;
{ maybe it's a dataset/field? }
GetDataSetAndField(Expr, ds, fld);
if (ds <> nil) and (fld <> '') then
begin
Value := ds.Value[fld];
if FEngineOptions.ConvertNulls and (Value = Null) then
case ds.FieldType[fld] of
fftNumeric:
Value := 0;
fftString:
Value := '';
fftBoolean:
Value := False;
end;
Result := True;
if Tag >= 0 then //eklediğim koşul !!!!!!!!!!!!!
Exit;
end;
{ searching in the sys variables }
i := FSysVariables.IndexOf(Expr);
if i <> -1 then
begin
case i of
0: Value := FEngine.StartDate; { Date }
1: Value := FEngine.StartTime; { Time }
2: Value := FPreviewPages.CurPage - FPreviewPages.FirstPage + 1; { Page }
3: Value := FPreviewPages.CurPage + 1; { Page# }
4: Value := FEngine.TotalPages - PreviewPages.FirstPage; { TotalPages }
5: Value := FEngine.TotalPages; { TotalPages# }
6: Value := FEngine.CurLine; { Line }
7: Value := FEngine.CurLineThrough; { Line# }
end;
Result := True;
Exit;
end;
{ value supplied by OnGetValue event }
TVarData(val).VType := varEmpty;
if Assigned(FOnGetValue) then
FOnGetValue(Expr, val);
if TVarData(val).VType <> varEmpty then
begin
Value := val;
Result := True;
Exit;
end;
{ searching in the variables }
i := FVariables.IndexOf(Expr);
if i <> -1 then
begin
val := FVariables.Items[i].Value;
if (TVarData(val).VType = varString) or (TVarData(val).VType = varOleStr) then
Value := Calc(val) else
Value := val;
Result := True;
Exit;
end;
{ searching in the variable }
v := FScript.FindLocal(Expr);
if v <> nil then
begin
Value := v.Value;
Result := True;
Exit;
end;
end;