मैंने समस्या को दूसरे समाधान से हल किया।
type
TInternalQuery = class(TQuery)
protected
procedure InternalInitFieldDefs; override;
public
constructor Create(AOwner: TComponent; const qryGen: TQuery); reintroduce;
end;
constructor TInternalQuery.Create(AOwner: TComponent; const qryGen: TQuery);
var
intCont: Integer;
begin
inherited Create(AOwner);
Self.DatabaseName := qryGen.DatabaseName;
Self.UpdateObject := qryGen.UpdateObject;
Self.SQL.Text := qryGen.SQL.Text;
for intCont := 0 to Self.ParamCount - 1 do
begin
Self.Params[intCont].Value := qryGen.Params[intCont].Value;
end;
end;
procedure TInternalQuery.InternalInitFieldDefs;
var
intCont: Integer;
begin
inherited InternalInitFieldDefs;
for intCont := 0 to FieldDefs.Count - 1 do
begin
if (FieldDefs[intCont].Size = 0) and (FieldDefs[intCont].DataType = ftBCD) then
begin
FieldDefs[intCont].Precision := 64;
FieldDefs[intCont].Size := 32;
end;
end;
end;
समस्या है ((फ़ील्डडिफ़्स [intCont]। आकार =0) और (फ़ील्डडिफ़्स [intCont]। डेटा टाइप =ftBCD))। जब ClientDataSet बनाया जाता है, तो फ़ील्ड को छोटा कर दिया जाता है, क्योंकि जब oracle में "SUM(TOTAL)" जैसा कोई फ़ंक्शन होता है, तो परिणाम फ़ील्ड आकार 0 के साथ बनाया जाता है, इसलिए क्लाइंटडेटासेट फ़ील्ड को पूर्णांक फ़ील्ड के रूप में संभालता है।