Mensagens: 14
Tópicos: 7
Registrado: Sep 2017
Reputação:
0
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?
Mensagens: 144
Tópicos: 6
Registrado: Sep 2016
Reputação:
8
(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.
Mensagens: 14
Tópicos: 7
Registrado: Sep 2017
Reputação:
0
(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.
Mensagens: 144
Tópicos: 6
Registrado: Sep 2016
Reputação:
8
26-10-2018, 06:10 AM
(Esta mensagem foi modificada pela última vez a: 26-10-2018, 06:10 AM por Isaque Pinheiro.)
(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.
Mensagens: 14
Tópicos: 7
Registrado: Sep 2017
Reputação:
0
19-11-2018, 10:15 PM
(Esta mensagem foi modificada pela última vez a: 19-11-2018, 10:24 PM por Osiel Gomes.)
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?
Mensagens: 144
Tópicos: 6
Registrado: Sep 2016
Reputação:
8
(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.
|