Array
(
)

Problemas com campos numéricos no Delphi 2010

Elton Rosa
   - 23 nov 2009

Olá pessoal!!!

Estou com o mesmo problema que num post anterior meu, só que dez vez com DBExpress+Firebird2.1+Delphi 2010.

Acontece o seguinte:

- Tenho uma base de dados com vários campos do tipo Double, para armazenar valores monetários.
Após feita a configuração do trio de componentes de acesso, quando insiro os campos, os desse tipo acima, aparecem como do tipo TSingleField e não TFloatField. Aí no momento em que vou cadastrar algum dado aparece essa mensagem de erro:

Já troquei para outro tipo de dados (NUMERIC(15,2)), e fiz testes até mesmo com outros componentes de conexão, mas o erro persiste.

Eduardo Vilaro
   - 24 nov 2009

Apartir do Delphi 2009 vc deve usar AnsiString no lugar de String.

0
|
0

Elton Rosa
   - 24 nov 2009

Mas onde faço essa configuração?

0
|
0

Rausch
   - 24 nov 2009

Opa... depois de vc mudar o campo no firebird, vc foi no Fields Editor  do SqlDataSet e no ClientDataSet e eliminou todos os campos, e adicionou novamente? Tenta isso, pois o q ta parecendo e q na primeira vez q vc adicionou, ele foi no formato string, pois o valor do campo preco de venda esta a sua esquerda, sendo q valores numericos sao alinhados a direita... Espero ter ajudado. 

0
|
0

Elton Rosa
   - 24 nov 2009

Obrigado pela resposta, mas acho que já fiz isso, na dúvida vou fazer isso!!!

Mas mesmo assim, os campos antes eram do tipo FLOAT e depois passei para NUMERIC(15,2). Não tem nada a ver com essa mensagem que induz que seja algo como String!!!

Mas vlw, vou olhar e posto o retorno!!!

0
|
0

Elton Rosa
   - 25 nov 2009

Consegui descobrir o erro!!!

  Na verdade estava na forma como gerar o valor da chave primaria, especificamente na parte em negrito. Eu nao estava usando sequences, mas o último valor do campo e incrementava com uma variável:   procedure TFrmComunidade.act_incluirExecute(Sender: TObject);
  var
     i: Integer;
begin
  ds.DataSet.Last;
  if (ds.DataSet.FieldByName('ID_MERCADORIA').Value = '') or (ds.DataSet.FieldByName('ID_MERCADORIA').IsNull)   then
  begin
    i := 0;
  end
  else
    begin
       i := ds.DataSet.FieldByName('ID_COMUNIDADE').AsInteger;
    end;
  ds.DataSet.Append;
  JvPageControl1.ActivePage := ts2;
  ds.DataSet.FieldByName('ID_MERCADORIA').AsInteger := i + 1; end;   O motivo era porque comparava se o valor do campo estava vazio, como string. Sendo assim, se fosse o primeiro registro na tabela, sempre daria esse erro.   Solução:   1ª: Remover esse bloco em negrito  ou 2ª: Fazer o uso de sequences e incrementar o valor através do comando sql que busca o valor atual do mesmo.     Vlw pessoal !!! Obrigado a todos que procuraram me ajudar!!!          

0
|
0

Gil
|
MVP
Pontos: 100
    27 nov 2009

voce já tentou trocar o tipo para DoublePrecision? 

0
|
0