Oracle
 sql >> база данни >  >> RDS >> Oracle

ClientDataSet TBCDField закръгляване

Реших проблема с друго решение.

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;

проблемът е ((FieldDefs[intCont].Size =0) и (FieldDefs[intCont].DataType =ftBCD)). когато се създава ClientDataSet, полето се съкращава, защото когато oracle има функция като "SUM(TOTAL)", полето за резултат се създава с размер 0, така че clientdataset обработва полето като поле Integer.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Максимум средни стойности

  2. PostgreSQL 9.5 - декодиране/избор на случай за разрешаване на грешка с utf8 не работи

  3. ORA-00913 твърде много стойности

  4. Функция ASCIISTR() в Oracle

  5. ORA-06553:PLS-801:вътрешна грешка [55018] при тестване на функция, връщаща ROWTYPE