ORMBr Fórum - Seja bem vindo
Campo AutoInc - Versão de Impressão

+- ORMBr Fórum - Seja bem vindo (https://www.ormbr.com.br/forum)
+-- Fórum: Fórum ORMBr - Aberto (https://www.ormbr.com.br/forum/forumdisplay.php?fid=1)
+--- Fórum: Como Usar (https://www.ormbr.com.br/forum/forumdisplay.php?fid=6)
+--- Tópico: Campo AutoInc (/showthread.php?tid=32)



Campo AutoInc - wanderleywm - 06-12-2017

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.


RE: Campo AutoInc - willian - 10-12-2017

(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?


RE: Campo AutoInc - wanderleywm - 11-12-2017

(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


RE: Campo AutoInc - willian - 13-12-2017

(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.


RE: Campo AutoInc - willian - 14-12-2017

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.


RE: Campo AutoInc - willian - 14-12-2017

(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


RE: Campo AutoInc - juliomar - 17-12-2017

(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.


RE: Campo AutoInc - Isaque Pinheiro - 04-08-2018

(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.