Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
Erro em ormbr.dataset.bind
#1
Pessoal tenho o seguinte código:

  containerContaPagar := TContainerFDMemTable<TModelContaPagar>.Create(Fconn.Conn, AQuery);
  containerTipoConta  := TContainerFDMemTable<TModelTIPOCONTA>.Create(Fconn.Conn, AQueryTipoConta, containerContaPagar.This);

O detalhe é que no meu Model do TModelContaPagar tem a seguinte Association:

 [Association(OneToOne,'ID_TIPO_CONTA','TIPO_CONTA','ID')]
 property TIPO_CONTA: TModelTIPOCONTA read FTIPOCONTA write FTIPOCONTA;

Acontece que se eu deixar essa duas linhas descomentadas ele dá erro de access violation que eu ainda não entendi o porque, o erro dá dentro da classe ormbr.dataset.bind
linhha 330 dentro da procedure TBindDataSet.SetFieldToProperty(ADataSet: TDataSet; AObject: TObject); exatamente em   LColumns := TMappingExplorer.GetInstance.GetMappingColumn(AObject.ClassType);
o engraçado que se eu habilitar as duas linhas ele fica passando várias vezes até dar o erro.


Banco Firebird 3.0
Alguma luz?
Responder
#2
(24-05-2018, 12:51 AM)Osiel Gomes Escreveu: Pessoal tenho o seguinte código:

  containerContaPagar := TContainerFDMemTable<TModelContaPagar>.Create(Fconn.Conn, AQuery);
  containerTipoConta  := TContainerFDMemTable<TModelTIPOCONTA>.Create(Fconn.Conn, AQueryTipoConta, containerContaPagar.This);

O detalhe é que no meu Model do TModelContaPagar tem a seguinte Association:

 [Association(OneToOne,'ID_TIPO_CONTA','TIPO_CONTA','ID')]
 property TIPO_CONTA: TModelTIPOCONTA read FTIPOCONTA write FTIPOCONTA;

Acontece que se eu deixar essa duas linhas descomentadas ele dá erro de access violation que eu ainda não entendi o porque, o erro dá dentro da classe ormbr.dataset.bind
linhha 330 dentro da procedure TBindDataSet.SetFieldToProperty(ADataSet: TDataSet; AObject: TObject); exatamente em   LColumns := TMappingExplorer.GetInstance.GetMappingColumn(AObject.ClassType);
o engraçado que se eu habilitar as duas linhas ele fica passando várias vezes até dar o erro.


Banco Firebird 3.0
Alguma luz?

Osiel, a extração de metadata do Firebird 3.0 é diferente das versões anteriores, na unit ormbr.metadata.firebird.pas tem os comandos SQL para extração, para o Firebird 3.0 tem que se criar uma unit ormbr.metadata.firebird3.pas  herdando a classe da seguinte forma TCatalogMetadataFirebird3  = class(TCatalogMetadataFirebird) e testar cada comando para analisar onde mudou

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

Responder
#3
(24-05-2018, 08:13 AM)Isaque Pinheiro Escreveu:
(24-05-2018, 12:51 AM)Osiel Gomes Escreveu: Pessoal tenho o seguinte código:

  containerContaPagar := TContainerFDMemTable<TModelContaPagar>.Create(Fconn.Conn, AQuery);
  containerTipoConta  := TContainerFDMemTable<TModelTIPOCONTA>.Create(Fconn.Conn, AQueryTipoConta, containerContaPagar.This);

O detalhe é que no meu Model do TModelContaPagar tem a seguinte Association:

 [Association(OneToOne,'ID_TIPO_CONTA','TIPO_CONTA','ID')]
 property TIPO_CONTA: TModelTIPOCONTA read FTIPOCONTA write FTIPOCONTA;

Acontece que se eu deixar essa duas linhas descomentadas ele dá erro de access violation que eu ainda não entendi o porque, o erro dá dentro da classe ormbr.dataset.bind
linhha 330 dentro da procedure TBindDataSet.SetFieldToProperty(ADataSet: TDataSet; AObject: TObject); exatamente em   LColumns := TMappingExplorer.GetInstance.GetMappingColumn(AObject.ClassType);
o engraçado que se eu habilitar as duas linhas ele fica passando várias vezes até dar o erro.


Banco Firebird 3.0
Alguma luz?

Osiel, a extração de metadata do Firebird 3.0 é diferente das versões anteriores, na unit ormbr.metadata.firebird.pas tem os comandos SQL para extração, para o Firebird 3.0 tem que se criar uma unit ormbr.metadata.firebird3.pas  herdando a classe da seguinte forma TCatalogMetadataFirebird3  = class(TCatalogMetadataFirebird) e testar cada comando para analisar onde mudou


Boa noite!!!

Isaque eu ainda encontro esse problema e agora na versão Firebird 2.5 e baixei os fontes mais atuais do GIT.
Responder
#4
(25-10-2018, 08:37 PM)Osiel Gomes Escreveu:
(24-05-2018, 08:13 AM)Isaque Pinheiro Escreveu:
(24-05-2018, 12:51 AM)Osiel Gomes Escreveu: Pessoal tenho o seguinte código:

  containerContaPagar := TContainerFDMemTable<TModelContaPagar>.Create(Fconn.Conn, AQuery);
  containerTipoConta  := TContainerFDMemTable<TModelTIPOCONTA>.Create(Fconn.Conn, AQueryTipoConta, containerContaPagar.This);

O detalhe é que no meu Model do TModelContaPagar tem a seguinte Association:

 [Association(OneToOne,'ID_TIPO_CONTA','TIPO_CONTA','ID')]
 property TIPO_CONTA: TModelTIPOCONTA read FTIPOCONTA write FTIPOCONTA;

Acontece que se eu deixar essa duas linhas descomentadas ele dá erro de access violation que eu ainda não entendi o porque, o erro dá dentro da classe ormbr.dataset.bind
linhha 330 dentro da procedure TBindDataSet.SetFieldToProperty(ADataSet: TDataSet; AObject: TObject); exatamente em   LColumns := TMappingExplorer.GetInstance.GetMappingColumn(AObject.ClassType);
o engraçado que se eu habilitar as duas linhas ele fica passando várias vezes até dar o erro.


Banco Firebird 3.0
Alguma luz?

Osiel, a extração de metadata do Firebird 3.0 é diferente das versões anteriores, na unit ormbr.metadata.firebird.pas tem os comandos SQL para extração, para o Firebird 3.0 tem que se criar uma unit ormbr.metadata.firebird3.pas  herdando a classe da seguinte forma TCatalogMetadataFirebird3  = class(TCatalogMetadataFirebird) e testar cada comando para analisar onde mudou


Boa noite!!!

Isaque eu ainda encontro esse problema e agora na versão Firebird 2.5 e baixei os fontes mais atuais do GIT.

Vamos lá

Você tem a Classe TModelContasPagar certo e tem a TModelTIPOCONTA que é uma filha dela blz. Agora vc criou o método construtor "Create()" em TModelContasPagar e nele instanciou TModelTIPOCONTA?

Assim:

constructor Create()
begin
   FTIPOCONTA := TModelTIPOCONTA.Create;
end;

dstructor Destroy()
begin
   FTIPOCONTA.Free;
end;

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

Responder
#5
Exatamente isso Isaque...

E agora eu refiz vários testes e peguei o exemplo do Firedac e ainda continuo com erro, agora olha que estranho se eu edito um registro ele só grava ou seja só da o comando UPDATE se eu colocar essas linhas no fonte:

oContainerMaster.DataSet.Post;
oContainerMaster.ApplyUpdates(0);

Em seguida se eu eu dar um oContainerMaster.Append preencho dois edit e dou
oContainerMaster.DataSet.Post;
oContainerMaster.ApplyUpdates(0);

Ele dá acess violation, minha configuração do banco esta assim
Código:
{Teste}
   // Instância da class de conexão via FireDAC
  oConn := TFactoryFireDAC.Create(Connection, dnFirebird);
  oConn.SetCommandMonitor(TFSQLMonitor.GetInstance);
  TFSQLMonitor.GetInstance.Show;
  // Master
  oContainerMaster := TContainerFDMemTable<TModelContaPagar>.Create(oConn, CDSFDMaster, 3);
  // Client
  oContainerClient := TContainerFDMemTable<TModelTipoConta>.Create(oConn, CDSFDClient, oContainerMaster.This);
  oContainerMaster.Open;
  {Fim}

Minha entidade (create) TModelContaPagar
constructor TModelContaPagar.Create(AQuery, AQueryTipoConta: TFDMemTable);
begin
  FTIPOCONTA := TModelTIPOCONTA.Create;
end;


Relacionamentos da entidade
Declaração variáveis
  private
    { Private declarations }
    FID: Integer;
    FDATA_CONTA: Nullable<TDateTime>;
    FVALOR_CONTA: Nullable<Double>;
    FID_TIPO_CONTA: Integer;
    FTIPOCONTA: TModelTIPOCONTA;

Meu public

[Column('ID_TIPO_CONTA', ftInteger)]
//    [ForeignKey('FK_CONTA_PAGAR_1', 'ID_TIPO_CONTA', 'TIPO_CONTA', 'ID')]
    [Dictionary('Tipo Conta', 'Mensagem de validação', '', '', '', taCenter)]
    property ID_TIPO_CONTA: Integer read FID_TIPO_CONTA write FID_TIPO_CONTA;


    [Restrictions([NoInsert, NoUpdate])]
    [Column('DESCRICAO', ftString, 60)]
    [JoinColumn('id_tipo_conta', 'TIPO_CONTA', 'ID', 'DESCRICAO', InnerJoin)]
    [Dictionary('Descrição Conta')]
    property TipoConta_Descricao: string read GETFTIPOCONTA_DESCRICAO ;

    [Association(OneToOne,'ID_TIPO_CONTA','TIPO_CONTA','ID')]
    property TIPO_CONTA: TModelTIPOCONTA read FTIPOCONTA write FTIPOCONTA;
Banco Firebird 2.5 - Tokyo 10.2.3 - Fontes do dia 20/10/2018

Alguma ideia?
Responder
#6
(19-11-2018, 10:15 PM)Osiel Gomes Escreveu: Exatamente isso Isaque...

E agora eu refiz vários testes e peguei o exemplo do Firedac e ainda continuo com erro, agora olha que estranho se eu edito um registro ele só grava ou seja só da o comando UPDATE se eu colocar essas linhas no fonte:

 oContainerMaster.DataSet.Post;
 oContainerMaster.ApplyUpdates(0);

Em seguida se eu eu dar um   oContainerMaster.Append preencho dois edit e dou  
 oContainerMaster.DataSet.Post;
 oContainerMaster.ApplyUpdates(0);

Ele dá acess violation, minha configuração do banco esta assim
Código:
{Teste}
  // Instância da class de conexão via FireDAC
 oConn := TFactoryFireDAC.Create(Connection, dnFirebird);
 oConn.SetCommandMonitor(TFSQLMonitor.GetInstance);
 TFSQLMonitor.GetInstance.Show;
 // Master
 oContainerMaster := TContainerFDMemTable<TModelContaPagar>.Create(oConn, CDSFDMaster, 3);
 // Client
 oContainerClient := TContainerFDMemTable<TModelTipoConta>.Create(oConn, CDSFDClient, oContainerMaster.This);
 oContainerMaster.Open;
 {Fim}

Minha entidade (create) TModelContaPagar
constructor TModelContaPagar.Create(AQuery, AQueryTipoConta: TFDMemTable);
begin
 FTIPOCONTA := TModelTIPOCONTA.Create;
end;


Relacionamentos da entidade
Declaração variáveis
 private
   { Private declarations }
   FID: Integer;
   FDATA_CONTA: Nullable<TDateTime>;
   FVALOR_CONTA: Nullable<Double>;
   FID_TIPO_CONTA: Integer;
   FTIPOCONTA: TModelTIPOCONTA;

Meu public

[Column('ID_TIPO_CONTA', ftInteger)]
//    [ForeignKey('FK_CONTA_PAGAR_1', 'ID_TIPO_CONTA', 'TIPO_CONTA', 'ID')]
   [Dictionary('Tipo Conta', 'Mensagem de validação', '', '', '', taCenter)]
   property ID_TIPO_CONTA: Integer read FID_TIPO_CONTA write FID_TIPO_CONTA;


   [Restrictions([NoInsert, NoUpdate])]
   [Column('DESCRICAO', ftString, 60)]
   [JoinColumn('id_tipo_conta', 'TIPO_CONTA', 'ID', 'DESCRICAO', InnerJoin)]
   [Dictionary('Descrição Conta')]
   property TipoConta_Descricao: string read GETFTIPOCONTA_DESCRICAO ;

   [Association(OneToOne,'ID_TIPO_CONTA','TIPO_CONTA','ID')]
   property TIPO_CONTA: TModelTIPOCONTA read FTIPOCONTA write FTIPOCONTA;
Banco Firebird 2.5 - Tokyo 10.2.3 - Fontes do dia 20/10/2018

Alguma ideia?
Depois de algum tempo, descobri que acontece AV quando no seu modelo não foi definido um PK, mas foi definido como AutoInc, essa situação foi tratada.

  Isaque Pinheiro
  Fundador 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 instanciando TContainerClientDataSet com coluna > 31 caracteres e valor default Odlawso 3 177 04-04-2019, 05:37 AM
Última Mensagem: juliomar
  Erro em campo NotNull samuca.ti@hotmail.com 14 3,156 02-10-2018, 09:54 AM
Última Mensagem: samuca.ti@hotmail.com
  Ormbr com CxGrid Osiel Gomes 4 2,041 26-11-2017, 11:00 AM
Última Mensagem: juliomar
  Erro de Tycast campo Blob Osiel Gomes 1 881 26-11-2017, 10:59 AM
Última Mensagem: juliomar

Saltar Fórum:


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