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


Saltar Fórum:


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