Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
Erro instanciando TContainerClientDataSet com coluna > 31 caracteres e valor default
#1
Saudações!

Está ocorrendo um erro quando instancio um TContainerClientDataSet<M> cuja entidade M contenha uma coluna com nome maior que 31 caracteres, conforme exemplo abaixo.
No Dictionary, além de ter o nome grande, a coluna precisa ter um valor default. Sem o valor default o erro não ocorre.

---- Início do exemplo

Classe TPedido:
----

type
  [Entity]
  [Table('pedido', '')]
  [PrimaryKey('codigo', NotInc, NoSort, False, 'Chave primária')]
  Tpedido = class(TInterfacedObject, Ipedido)
  private
    { Private declarations }
    Fcodigo: Integer;

...

    Fvalor_outras_despesas_acessorias: Currency;

...

  public
...

    [Column('valor_outras_despesas_acessorias', ftCurrency)]
    [Dictionary('valor_outras_despesas_acessorias', 'Mensagem de validação', '0', '', '', taRightJustify)]
    property valor_outras_despesas_acessorias: Currency read Fvalor_outras_despesas_acessorias write Fvalor_outras_despesas_acessorias;


Chamada onde ocorre o erro:
------

FContainerPedido := TContainerClientDataSet<TPedido>.Create(FConn.Conn, qryPedido);


Exception:
------

valor_outras_despesas_acessorias: Preparation of default expression failed with error "Violação de acesso ao endereço 009AE939 no módulo 'MeuServer.exe'. Leitura do endereço 00000034"

---- Fim do exemplo

Alguém já passou por esse problema e tem uma solução?
Responder
#2
(29-03-2019, 04:02 PM)Odlawso Escreveu: Saudações!

Está ocorrendo um erro quando instancio um TContainerClientDataSet<M> cuja entidade M contenha uma coluna com nome maior que 31 caracteres, conforme exemplo abaixo.
No Dictionary, além de ter o nome grande, a coluna precisa ter um valor default. Sem o valor default o erro não ocorre.

---- Início do exemplo

Classe TPedido:
----

type
  [Entity]
  [Table('pedido', '')]
  [PrimaryKey('codigo', NotInc, NoSort, False, 'Chave primária')]
  Tpedido = class(TInterfacedObject, Ipedido)
  private
    { Private declarations }
    Fcodigo: Integer;

...

    Fvalor_outras_despesas_acessorias: Currency;

...

  public
...

    [Column('valor_outras_despesas_acessorias', ftCurrency)]
    [Dictionary('valor_outras_despesas_acessorias', 'Mensagem de validação', '0', '', '', taRightJustify)]
    property valor_outras_despesas_acessorias: Currency read Fvalor_outras_despesas_acessorias write Fvalor_outras_despesas_acessorias;


Chamada onde ocorre o erro:
------

FContainerPedido := TContainerClientDataSet<TPedido>.Create(FConn.Conn, qryPedido);


Exception:
------

valor_outras_despesas_acessorias: Preparation of default expression failed with error "Violação de acesso ao endereço 009AE939 no módulo 'MeuServer.exe'. Leitura do endereço 00000034"

---- Fim do exemplo

Alguém já passou por esse problema e tem uma solução?

Nunca passei, porque nunca fiz isso, mas veja que o erro é no DefaultExpression do TField, e o ORMBr cria os TFields com os nomes dos atributos Columns() é bem provavel que esse erro possa ser do delphi ao nome longo do TField

Tente mudar somente

[Column('valoroutrasdespesasacessorias', ftCurrency)]
[Dictionary('valoroutrasdespesasacessorias', 'Mensagem de validação', '0', '', '', taRightJustify)]

  Isaque Pinheiro
  Fundador do Projeto ORM Brasil
  ORMBr SAC - Assine e faça parte dessa história ajudando o projeto a crescer.

Responder
#3
Obrigado por responder.
Se reduzir o tamanho do nome, não ocorre o problema.
Pesquisei um pouco mais e descobri que o ClientDataSet limita o tamanho máximo dos fields em 31 caracteres (https://forums.embarcadero.com/thread.js...dID=176332) e possivelmente esta é a causa do problema.
Estou contornando o problema usando o TFDMemTable e parece estar funcionando.
Confirmando esta solução volto a postar aqui.
Responder
#4
lembre que isso é limitador também em bancos de dados

  Juliomar Marchetti
  Moderador do Projeto ORM Brasil
  ORMBr SAC - Assine e faça parte dessa história ajudando o projeto a crescer.

Responder


Possíveis Tópicos Relacionados...
Tópico: Autor Respostas: Visualizações: Última Mensagem
  Erro em ormbr.dataset.bind Osiel Gomes 5 3,853 01-03-2019, 08:49 AM
Última Mensagem: Isaque Pinheiro
  Erro em campo NotNull samuca.ti@hotmail.com 14 8,308 02-10-2018, 09:54 AM
Última Mensagem: samuca.ti@hotmail.com
  Erro de Tycast campo Blob Osiel Gomes 1 2,061 26-11-2017, 10:59 AM
Última Mensagem: juliomar

Saltar Fórum:


usuários a ver este tópico: 2 Visitante(s)