Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ClientDataSet TBCDField làm tròn

Tôi đã giải quyết vấn đề bằng một giải pháp khác.

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;

vấn đề là ((FieldDefs [intCont] .Size =0) và (FieldDefs [intCont] .DataType =ftBCD)). khi ClientDataSet được tạo, trường sẽ bị cắt bớt, vì khi oracle có hàm như "SUM (TOTAL)", trường kết quả được tạo với kích thước 0, vì vậy clientdataset xử lý trường dưới dạng trường Số nguyên.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tìm tên ràng buộc trong Oracle

  2. đột biến, trình kích hoạt / chức năng có thể không nhìn thấy nó- lỗi trong quá trình thực thi trình kích hoạt

  3. Các biểu mẫu / ứng dụng Oracle trong Internet Explorer 8 sử dụng JInitator

  4. Oracle 'CHÈN TẤT CẢ' bỏ qua các bản sao

  5. Cách chuyển đổi thập phân sang thập lục phân bằng TO_CHAR () trong Oracle