Problemas com campos numéricos no Delphi 2010
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.
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
Curtidas 0
Respostas
Eduardo Vilaro
23/11/2009
Apartir do Delphi 2009 vc deve usar AnsiString no lugar de String.
GOSTEI 0
Elton Rosa
23/11/2009
Mas onde faço essa configuração?
GOSTEI 0
Carlos Bernardo
23/11/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.
GOSTEI 0
Elton Rosa
23/11/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!!!
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!!!
GOSTEI 0
Elton Rosa
23/11/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!!!
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!!!
GOSTEI 0
Gilberto Moura
23/11/2009
voce já tentou trocar o tipo para DoublePrecision?
GOSTEI 0