Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Oi pessoal...
Andei procurando mas não encontrei nada sobre isso...
Simples... dado um campo de uma tabela, do tipo ftFloat, ftCurrency, ftBCD...
Como recuperar a quantidade de casas decimais do campo?
Pelo DBExplorer, por exemplo, sei que um campo, p.e., precocusto é do tipo Numerico, tamanho = 14 (size), quatro casas decimais (scale=4)...
Como recuperar essa informacao pelo Delphi?
No caso,
iFieldG := 14; iSize := table1.Fields[iFieldG].Size; iDataSize := table1.Fields[iFieldG].DataSize; ShowMessage(table1.Fields[iFieldG].DisplayName+'='+ 'iDataSize='+IntToStr(iDataSize)+ 'iSize='+IntToStr(iSize));
Se o campo é string (char) de 13 caracteres (codigoean), DataSize = 14 e Size = 13
Se logico (boolean), retorna DataSize=2 e Size =0
Se Data (datetime), retorna DataSize=4 e Size =0
Se Inteiro (integer), retorna DataSize=2 e Size =0
e assim por diante...
O caso é... onde fica a quantidade de casas decimais?
Grato por qualquer ajuda!!!
Abraços
Tente assim:
function RetornaPrecisao(Sender: TField):integer;
begin
Result := 0;
if not Sender is TFMTBCDField then Exit;
Result := TFMTBCDField(Sender).Precision;
end;
Para chamar a função: RetornaPrecisao(DataSet.Fields.Fields[índice]); {DataSet = Query, ClientDataSet, Etc.}
Flw
Isso pode variar, pois você pode criar o campo no banco como Double Precision e ele armazenar várias casa decimais, ao menos que crie campo que você delimita o n° máximo de casas decimais, mas fora isto não vai ter um n° exato de casas.