Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
Geração de de DDL para chave primária de banco MySQL
#1
Olá Isaque, estou utilizando o ORMBr com banco MySQL. 
Toda vez que refaço um BuildDatabase, o framework gera uma recriação da chave primária.  
Isso está correto? Tem alguma dica?
Responder
#2
(06-09-2017, 03:28 AM)Edson Luis Vasconcelos Escreveu: Olá Isaque, estou utilizando o ORMBr com banco MySQL. 
Toda vez que refaço um BuildDatabase, o framework gera uma recriação da chave primária.  
Isso está correto? Tem alguma dica?

Boa noite
a princípio deveria recriar somente se houvesse alteração do que já tem no banco.
consegue reproduzir usando um dos exemplos do git?
aponta para seu banco e se possível anexe uma das classes  criadas para ORMBr

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

Responder
#3
(24-09-2017, 11:50 PM)juliomar Escreveu:
(06-09-2017, 03:28 AM)Edson Luis Vasconcelos Escreveu: Olá Isaque, estou utilizando o ORMBr com banco MySQL. 
Toda vez que refaço um BuildDatabase, o framework gera uma recriação da chave primária.  
Isso está correto? Tem alguma dica?

Boa noite
a princípio deveria recriar somente se houvesse alteração do que já tem no banco.
consegue reproduzir usando um dos exemplos do git?
aponta para seu banco e se possível anexe uma das classes  criadas para ORMBr

Isaque isso ocorre comigo também e é devido ao fato de que o MySql não dá um nome específico a constraint de chave primaria todas ficam com o nome 'PRIMARY'. daí como o OrmBr busca, por padrão, o nome da constraint como 'pk_' + Nome da tabela, ele não acha e tenta recriar, acarretando um erro. Esse mesmo problema ocorre com o SQLite. Eu, sem conhecimento profundo do código resolvi alterando duas units do OrmBr:
ormbr.metadata.model, na linha 267 do método TModelMetadata.GetPrimaryKey: 
 
if (Self.FConnection.GetDriverName = dnMySQL) or (Self.FConnection.GetDriverName = dnSQLite) then
    begin
      ATable.PrimaryKey.Name := '';
    end
    else
    begin
      ATable.PrimaryKey.Name := Format('PK_%s', [ATable.Name]);
 end;

e na unit ormbr.metadata.mysql, no método, TCatalogMetadataMySQL.GetPrimaryKey na linha 279

ATable.PrimaryKey.Name := '';//VarToStr(oDBResultSet.GetFieldValue('pk_name'));

Talvez tenha uma forma mais correta de se resolver.
Responder


Possíveis Tópicos Relacionados...
Tópico: Autor Respostas: Visualizações: Última Mensagem
  Chave Primaria no Sql Server Eduardo Piazzi 3 4,124 13-02-2018, 10:16 AM
Última Mensagem: juliomar

Saltar Fórum:


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