Erro ao Atribuir o displayFormat a um campo float #232
Replies: 4 comments
-
1 - Posta o JSON que está carregando. |
Beta Was this translation helpful? Give feedback.
-
1 - Json em anexo. Obs.: o campo que gerar o problema é VALOR_LICENCA_PRIM_ANO. 2 - Sim. |
Beta Was this translation helpful? Give feedback.
-
Bom dia, Fiz um ajuste para tratar o dataSet no seu .berforeOpen. Aí ajusto manualmente os dataType como de fato são. Mas isso é apenas um ajuste temporário e não ideal, rs. Obrigado |
Beta Was this translation helpful? Give feedback.
-
Vamos lá.. 1° O DataSet-Serialize, não cria os field de forma automática olhando para Tabela, e sim para o JSON, até porque você está usando uma TFDMemTable e nem teria acesso ao banco por ser um DataSet temporário. 2° Como falei que o DataSet-Serialize cria os fields de forma automática olhando para o JSON, ele vai olhar atributo por atributo do JSON, pegar o seu valor e verificar qual o tipo dele, se é um atributo string, boolean, numeric... se não estiver enganado o JSON trabalha apenas com esses tipos... então veja só: Repare que tirando esses campos, todos são strings, então ele cria como string. Os que estão null, é impossível o DataSet-Serialize saber o tipo do dado, então sim, ele vai criar como ftString também. Entendeu? Uma solução, seria você mesmo criar os fields manualmente no seu TFDMemTable, eu até prefiro, porque assim eu consigo usar no meu código por exemplo algo semelhante a isso aqui: mtCadastroCODIGO.AsInteger ao invés disso aqui: mtCadastro.FieldByName('CODIGO').AsInteger Porque? Porque usando assim mtCadastroCODIGO.AsInteger se eu remover o campo do DataSet, o compilador vai me acusar erro ao compilar. Usando assim mtCadastro.FieldByName('CODIGO').AsInteger não vai dar erro, vai compilar, e o erro vai estourar apenas quando passar por essa linha, muitas das vezes lá no cliente. |
Beta Was this translation helpful? Give feedback.
-
Estou executando a seguinte rotina no afterOpen de um memTable (Delphi).
TNumericField(FDMemTable1.FieldByName('VALOR')).DisplayFormat := '0.00".
Se alimentar essa memtable com o DataSet.Serialize -> FDMemTable1.LoadFromJSON(LResponse.Content), ao ocorrer a execução dessa rotina acima, ocorre um access violation se algum registro da lista tiver o campo VALOR = null. Se alimentar a memTable via código normal ou fazer um copyDataSet de um FDQUery, por exemplo, aí o erro não ocorre.
Alguma sugestão de como evitar esse erro?
obrigado!
Beta Was this translation helpful? Give feedback.
All reactions