Fórum Generator Em GDB Multi-Empresa #44691

06/06/2004

0

Ola pessoal.

Como faço para incrementar o ´ID´ em um GDB multi_Emprea, sendo que cada tabela contem o codigo ´ID_EMPRESA e ID ´ como chave primaria. O problema é que quando se trada de um GDB para cada não ha problemas, pois cada banco possui o generator especifico de cada tabela. E no caso de um só banco, como faço esse incremento? Pois se utilizo um generator, e faça um cadasdo na empresa ´UM´ e o id foi igual a ´1´, se alterno de empresa ´TRES´ o próximo sera ´2´, perdendo a sequencia, sendo que na empresa TRES deveria ser ´1´. Como posso contornar esta situação???


[]s.


Siro

Siro

Responder

Posts

07/06/2004

Bon Jovi

Pq nao usa um simples Select Max... Where Id_Empresa = ...


Responder

Gostei + 0

07/06/2004

Siro

Obrigado pela atenção Bon Jovi,

Más não é o adequado para cliente/server..

[]s.


Responder

Gostei + 0

07/06/2004

Vinicius2k

Permitam-me opinar no assunto...

Porque não é adequado Siro? Não vejo como usar generators neste caso... e tbm se vc estivesse usando um outro banco de dados, não poderia usar campos autoinc, ou ID, por exemplo...
Além da sugestão do Bon Jovi que é boa, vc pode fazer uso de uma tabela auxiliar... é assim q eu utilizava nos tempos do clipper...
EMPRESA | IDCLIENTE
1         7
2         3
3         6

antes de gravar vc lê a última ID da empresa corrente + 1, grava, atualiza a tabela auxiliar e commita a transação...
é mais rápido q o select max... mas tem a desvantagem de trabalhar com duas tabelas...

T+


Responder

Gostei + 0

07/06/2004

Siro

Brigadão pela atenção Vinicius2K, as informações prestadas pelos colegas e que fazem com que a gente sempre aprenda e pense na melhor forma de resolver um problema.

No meu caso se fizer select max(id) existira trafego na rede, e quanto a tabela auxiliar, é assim que estou utilizando. Minha pergunta talves não tenha sido clara. Gostaria de saber se existe uma forma de utilizar ´Generator´ em vez de uma tabela axiliar, isso enconomiza código. Mas como vc mesmo disse ´Não [b:4f5dd9cb25]vejo como usar generators neste caso... ´[/b:4f5dd9cb25], e eu tambem não consigo, mas talvez existisse uma forma, e alguem com mais experiencia do que eu pudesse saber,por isso estou questinado. Eu não não estou querendo utilizar outro banco de Dados diferente do Interbase/Firebird, o que faço é que para cada empresa cadastrada existe um GDB. Ex (Emp_01, Em_02, etc) que o usuário escolhe e é feito a conexão referente a empresa selecionada , sendo que cada um tem as suas caracteristicas.


[]s.


Responder

Gostei + 0

07/06/2004

Vinicius2k

No meu caso se fizer select max(id) existira trafego na rede

sim, mas de um único registro... vai aumentar apenas o trabalho do servidor, realizando a query... deste ponto de vista eu discordo...

Eu não não estou querendo utilizar outro banco de Dados diferente do Interbase/Firebird, o que faço é que para cada empresa cadastrada existe um GDB. Ex (Emp_01, Em_02, etc) que o usuário escolhe e é feito a conexão referente a empresa selecionada , sendo que cada um tem as suas caracteristicas.

eu quiz dizer que o conceito do generator, como simples autoinc, não se aplica... nem mesmo um legítimo autoinc não lhe serviria, entende?
acho q vc está certo em querer mudar... eu, particularmente, não considero uma boa prática e sempre trabalhei com um id de empresa na tabela...

Gostaria de saber se existe uma forma de utilizar ´Generator´ em vez de uma tabela axiliar, isso enconomiza código. Mas como vc mesmo disse ´Não [b:77c51b27be]vejo como usar generators neste caso... ´[/b:77c51b27be]

acabo de voltar aqui porque fiquei com esta idéia na cabeça... pode existir uma alternativa...
um generator não é atrelado a uma tabela, logo, vc pode ter quantos generators quiser fazendo referencia a mesma tabela, porém armazenam valores diferentes...
então vc pode (é só uma teoria) ao cadastrar uma empresa, criar um generator_empresa999_tabelaXXX no banco para cada tabela que vc necessite... neste ponto vc pode criar uma stored procedure que faça o incremento do generator da empresa corrente, antes de gravar vc executa a SP pegando o valor de retorno dela para seu campo ID...
de qualquer forma vc vai ter algum (pequeno) tráfego na rede e trabalho no servidor...
acho q é uma idéia q pode ser trabalhada, ou talvez algum outro colega discorde da teoria...

T+


Responder

Gostei + 0

10/06/2004

Bon Jovi

Puramente pra Interbase/Fb o GENERATOR pode até ser melhor, assim como SEQUENCE é pra Oracle. Mas tendo índice exclusivo pro campo (e nao só pra chave composta) o MAX vai ser instantâneo. Se nao tiver com índice aí realmente o bicho pode pegar. Com MAX é menos uma particularidade pra a aplicação ficar tratando, em relação à outros bancos q for usar agora ou no futuro.


Responder

Gostei + 0

16/06/2004

Rodrrs

uma ideia para vcs.



vc pode a cada empresa que cadastrar criar um generator para ela

ex.

gen_empresa_01
Gen_empresa_02
Gen_empresa_03

quando vc quiser vc busca no select o valor de cada generator para a empresa


da um select busca somente o gen da empresa


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar