Problemas com campos numéricos no Delphi 2010

23/11/2009

0

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.





Elton Rosa

Elton Rosa

Responder

Posts

24/11/2009

Eduardo Vilaro

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

24/11/2009

Elton Rosa

Mas onde faço essa configuração?

Responder

24/11/2009

Carlos Bernardo

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. 
Responder

24/11/2009

Elton Rosa

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!!!

Responder

25/11/2009

Elton Rosa

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!!!          
Responder

27/11/2009

Gilberto Moura

voce já tentou trocar o tipo para DoublePrecision? 
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar