sql >> Database teknologi >  >> RDS >> Oracle

ClientDataSet TBCDField afrunding

Jeg løste problemet med en anden løsning.

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;

problemet er ((FieldDefs[intCont].Size =0) og (FieldDefs[intCont].DataType =ftBCD)). når ClientDataSet er oprettet, afkortes feltet, for når oracle har en funktion som "SUM(TOTAL)" oprettes resultatfeltet med størrelse 0, så klientdatasættet håndterer feltet som heltalsfelt.



  1. Hvordan man skriver en MySQL-forespørgsel, der returnerer en midlertidig kolonne, der indeholder flag for, hvorvidt et element relateret til den række findes i en anden tabel eller ej

  2. MySQL rækkefølge efter samme rækkefølge af værdier i IN-klausulen

  3. Få en liste over argumenter med standardværdi

  4. testing.postgresql kommando ikke fundet:initdb inde i docker