Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
Campo AutoInc
#1
Bom dia,

Estou analisando, e pude observar que no primary key temos a opção do campo autoinc. Adicionei a sequencia e estou testando com o Firebird, porém o mesmo não está incrementando o ID.

Ex:
  [Entity]
  [Table('Servico', '')]
  [PrimaryKey('Servico_id', AutoInc, NoSort, True, 'Chave primária')]
  [Sequence('seq_Servico')]
  [Indexe('idx_servico_descricao', 'descricao')]


Tem mais alguma configuração que preciso fazer ou terei que criar a sequencia no banco?

obs: a criação de tabelas e campos está funcionando perfeitamente.
Responder
#2
(06-12-2017, 11:20 AM)wanderleywm Escreveu: Bom dia,

Estou analisando, e pude observar que no primary key temos a opção do campo autoinc. Adicionei a sequencia e estou testando com o Firebird, porém o mesmo não está incrementando o ID.

Ex:
  [Entity]
  [Table('Servico', '')]
  [PrimaryKey('Servico_id', AutoInc, NoSort, True, 'Chave primária')]
  [Sequence('seq_Servico')]
  [Indexe('idx_servico_descricao', 'descricao')]


Tem mais alguma configuração que preciso fazer ou terei que criar a sequencia no banco?

obs: a criação de tabelas e campos está funcionando perfeitamente.

Desculpe a pergunta básica, mas você verificou se o trigger e o generator foram criados no banco?
Responder
#3
(10-12-2017, 11:37 PM)willian Escreveu:
(06-12-2017, 11:20 AM)wanderleywm Escreveu: Bom dia,

Estou analisando, e pude observar que no primary key temos a opção do campo autoinc. Adicionei a sequencia e estou testando com o Firebird, porém o mesmo não está incrementando o ID.

Ex:
  [Entity]
  [Table('Servico', '')]
  [PrimaryKey('Servico_id', AutoInc, NoSort, True, 'Chave primária')]
  [Sequence('seq_Servico')]
  [Indexe('idx_servico_descricao', 'descricao')]


Tem mais alguma configuração que preciso fazer ou terei que criar a sequencia no banco?

obs: a criação de tabelas e campos está funcionando perfeitamente.

Desculpe a pergunta básica, mas você verificou se o trigger e o generator foram criados no banco?

Não. Não foi criado. Apenas a tablea está criada sem tiggers e generator....

(11-12-2017, 05:31 PM)wanderleywm Escreveu:
(10-12-2017, 11:37 PM)willian Escreveu:
(06-12-2017, 11:20 AM)wanderleywm Escreveu: Bom dia,

Estou analisando, e pude observar que no primary key temos a opção do campo autoinc. Adicionei a sequencia e estou testando com o Firebird, porém o mesmo não está incrementando o ID.

Ex:
  [Entity]
  [Table('Servico', '')]
  [PrimaryKey('Servico_id', AutoInc, NoSort, True, 'Chave primária')]
  [Sequence('seq_Servico')]
  [Indexe('idx_servico_descricao', 'descricao')]


Tem mais alguma configuração que preciso fazer ou terei que criar a sequencia no banco?

obs: a criação de tabelas e campos está funcionando perfeitamente.

Desculpe a pergunta básica, mas você verificou se o trigger e o generator foram criados no banco?

Não. Não foi criado. Apenas a tablea está criada sem tiggers e generator....

Apaguei a Tabela, e percebi que o mesmo criou o generator, mais trigger não. Mais mesmo assim não está incrementando a primary key
Responder
#4
(11-12-2017, 05:31 PM)wanderleywm Escreveu:
(10-12-2017, 11:37 PM)willian Escreveu:
(06-12-2017, 11:20 AM)wanderleywm Escreveu: Bom dia,

Estou analisando, e pude observar que no primary key temos a opção do campo autoinc. Adicionei a sequencia e estou testando com o Firebird, porém o mesmo não está incrementando o ID.

Ex:
  [Entity]
  [Table('Servico', '')]
  [PrimaryKey('Servico_id', AutoInc, NoSort, True, 'Chave primária')]
  [Sequence('seq_Servico')]
  [Indexe('idx_servico_descricao', 'descricao')]


Tem mais alguma configuração que preciso fazer ou terei que criar a sequencia no banco?

obs: a criação de tabelas e campos está funcionando perfeitamente.

Desculpe a pergunta básica, mas você verificou se o trigger e o generator foram criados no banco?

Não. Não foi criado. Apenas a tablea está criada sem tiggers e generator....

(11-12-2017, 05:31 PM)wanderleywm Escreveu:
(10-12-2017, 11:37 PM)willian Escreveu:
(06-12-2017, 11:20 AM)wanderleywm Escreveu: Bom dia,

Estou analisando, e pude observar que no primary key temos a opção do campo autoinc. Adicionei a sequencia e estou testando com o Firebird, porém o mesmo não está incrementando o ID.

Ex:
  [Entity]
  [Table('Servico', '')]
  [PrimaryKey('Servico_id', AutoInc, NoSort, True, 'Chave primária')]
  [Sequence('seq_Servico')]
  [Indexe('idx_servico_descricao', 'descricao')]


Tem mais alguma configuração que preciso fazer ou terei que criar a sequencia no banco?

obs: a criação de tabelas e campos está funcionando perfeitamente.

Desculpe a pergunta básica, mas você verificou se o trigger e o generator foram criados no banco?

Não. Não foi criado. Apenas a tablea está criada sem tiggers e generator....

Apaguei a Tabela, e percebi que o mesmo criou o generator, mais trigger não. Mais mesmo assim não está incrementando a primary key

Estou fazendo uns testes aqui com o Firebird, e estou com o mesmo problema, também não sei se precisa de mais alguma configuração para funcionar, comecei a testar o ORMBr agora.

Quanto ao trigger, se o ORMBr fizer o incremento do sequence por conta, não seria necessário.

Tentei incrementar manualmente o sequence direto no banco, mas não dá diferença nenhuma na hora de incluir.

Ou seja, o sequence (generator) está sendo criado corretamente mas ao incluir um registro, ele não é lido e nem incrementado.
Responder
#5
1) Coloque um breakPoint na linha 114 da unit ormbr.command.inserter
2) Execute a aplicação pelo Delphi e tente fazer a inclusão


Não sei se isto é normal, como eu disse comecei a testar o ORMBr agora, mas
no meu caso, está acontecendo o seguinte:

o valor de LPrimaryKey.Columns.IndexOf(LColumn.ColumnName) neste trecho de código é -1



Código:
 if LPrimaryKey.Columns.IndexOf(LColumn.ColumnName) > -1 then     /////////<<<<----------este if retorna false
      if LPrimaryKey.AutoIncrement then
        LColumn.PropertyRtti.SetValue(AObject,
                                      FGeneratorCommand.GeneratorSequenceNextValue(AObject,
                                                                                   FDMLCommandInsert));
    /// <summary>


Ver imagem em anexo.

Por isso, o método GeneratorSequenceNextValue não é executado.


Arquivo(s) anexado(s) Miniatura(s)
   
Responder
#6
(14-12-2017, 10:35 AM)willian Escreveu: 1) Coloque um breakPoint na linha 114 da unit ormbr.command.inserter
2) Execute a aplicação pelo Delphi e tente fazer a inclusão


Não sei se isto é normal, como eu disse comecei a testar o ORMBr agora, mas
no meu caso, está acontecendo o seguinte:

o valor de LPrimaryKey.Columns.IndexOf(LColumn.ColumnName) neste trecho de código é -1



Código:
 if LPrimaryKey.Columns.IndexOf(LColumn.ColumnName) > -1 then     /////////<<<<----------este if retorna false
      if LPrimaryKey.AutoIncrement then
        LColumn.PropertyRtti.SetValue(AObject,
                                      FGeneratorCommand.GeneratorSequenceNextValue(AObject,
                                                                                   FDMLCommandInsert));
    /// <summary>


Ver imagem em anexo.

Por isso, o método GeneratorSequenceNextValue não é executado.

O que está acontecendo é que o nome da propriedade setada em Lprimary.Columns está em MAIÚSCULA enquanto LColumn.ColumName está em MINÚSCULA, ou seja, retorna -1 porque não existe id em minúscula, somente em maiúscula.

Veja a imagem anexa para entender melhor o problema

alterar o atributo de propriedade da sua classe para maiúscula, fiz o teste aqui e gerou o ID corretamente.

Por exemplo, se o atributo [primarykey('*****',.... estiver em maiúscula o atributo [column('*****',... que ele referencia também deverá estar.

Na minha classe TPessoa está assim:

[PrimaryKey('ID', AutoInc,NoSort,True,'Chave Primária')]

[Column('ID', ftInteger)]

Ou seja, eles são "Case-Sensitive", se "PrimaryKey" está em maiúscula, o atributo Column  também deve estar. -

Acho que isto poderia ser incluído na documentação


Arquivo(s) anexado(s) Miniatura(s)
   
Responder
#7
(14-12-2017, 12:19 PM)willian Escreveu:
(14-12-2017, 10:35 AM)willian Escreveu: 1) Coloque um breakPoint na linha 114 da unit ormbr.command.inserter
2) Execute a aplicação pelo Delphi e tente fazer a inclusão


Não sei se isto é normal, como eu disse comecei a testar o ORMBr agora, mas
no meu caso, está acontecendo o seguinte:

o valor de LPrimaryKey.Columns.IndexOf(LColumn.ColumnName) neste trecho de código é -1



Código:
 if LPrimaryKey.Columns.IndexOf(LColumn.ColumnName) > -1 then     /////////<<<<----------este if retorna false
      if LPrimaryKey.AutoIncrement then
        LColumn.PropertyRtti.SetValue(AObject,
                                      FGeneratorCommand.GeneratorSequenceNextValue(AObject,
                                                                                   FDMLCommandInsert));
    /// <summary>


Ver imagem em anexo.

Por isso, o método GeneratorSequenceNextValue não é executado.

O que está acontecendo é que o nome da propriedade setada em Lprimary.Columns está em MAIÚSCULA enquanto LColumn.ColumName está em MINÚSCULA, ou seja, retorna -1 porque não existe id em minúscula, somente em maiúscula.

Veja a imagem anexa para entender melhor o problema

alterar o atributo de propriedade da sua classe para maiúscula, fiz o teste aqui e gerou o ID corretamente.

Por exemplo, se o atributo [primarykey('*****',....  estiver em maiúscula o atributo [column('*****',... que ele referencia também deverá estar.

Na minha classe TPessoa está assim:

[PrimaryKey('ID', AutoInc,NoSort,True,'Chave Primária')]

[Column('ID', ftInteger)]

Ou seja, eles são "Case-Sensitive", se "PrimaryKey" está em maiúscula, o atributo Column  também deve estar. -

Acho que isto poderia ser incluído na documentação
Por favor pode alterar ela e anexar que subimos ao git ou faça um pull request da alteração da documentação.
assim funciona um componente aberto, recebe sugestões e doações de código, documentação e financeiramente.

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

Responder
#8
(14-12-2017, 12:19 PM)willian Escreveu:
(14-12-2017, 10:35 AM)willian Escreveu: 1) Coloque um breakPoint na linha 114 da unit ormbr.command.inserter
2) Execute a aplicação pelo Delphi e tente fazer a inclusão


Não sei se isto é normal, como eu disse comecei a testar o ORMBr agora, mas
no meu caso, está acontecendo o seguinte:

o valor de LPrimaryKey.Columns.IndexOf(LColumn.ColumnName) neste trecho de código é -1



Código:
 if LPrimaryKey.Columns.IndexOf(LColumn.ColumnName) > -1 then     /////////<<<<----------este if retorna false
      if LPrimaryKey.AutoIncrement then
        LColumn.PropertyRtti.SetValue(AObject,
                                      FGeneratorCommand.GeneratorSequenceNextValue(AObject,
                                                                                   FDMLCommandInsert));
    /// <summary>


Ver imagem em anexo.

Por isso, o método GeneratorSequenceNextValue não é executado.

O que está acontecendo é que o nome da propriedade setada em Lprimary.Columns está em MAIÚSCULA enquanto LColumn.ColumName está em MINÚSCULA, ou seja, retorna -1 porque não existe id em minúscula, somente em maiúscula.

Veja a imagem anexa para entender melhor o problema

alterar o atributo de propriedade da sua classe para maiúscula, fiz o teste aqui e gerou o ID corretamente.

Por exemplo, se o atributo [primarykey('*****',....  estiver em maiúscula o atributo [column('*****',... que ele referencia também deverá estar.

Na minha classe TPessoa está assim:

[PrimaryKey('ID', AutoInc,NoSort,True,'Chave Primária')]

[Column('ID', ftInteger)]

Ou seja, eles são "Case-Sensitive", se "PrimaryKey" está em maiúscula, o atributo Column  também deve estar. -

Acho que isto poderia ser incluído na documentação

Anotado a situação, vou verificar sobre.

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

Responder


Saltar Fórum:


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