sql >> Databáze >  >> RDS >> Oracle

ClientDataSet TBCDField zaokrouhlení

Problém jsem vyřešil jiným řešením.

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;

problém je ((FieldDefs[intCont].Size =0) a (FieldDefs[intCont].DataType =ftBCD)). když je vytvořena sada ClientDataSet, pole je zkráceno, protože když má Oracle funkci jako "SUM(TOTAL)", je výsledné pole vytvořeno s velikostí 0, takže sada clientdataset pole zpracuje jako pole Integer.



  1. 🆕 SQL Server 2022 První pohled – 5 nejlepších nových funkcí (Bonus 5 funkcí)

  2. Odstraňte řádky SQL, kde ID nemají shodu, z jiné tabulky

  3. Dotaz MySQL pro získání věku od data narození

  4. Cakephp – obsahuje (kontejnovatelné chování) načítá příliš mnoho