Fórum Problema de PK na geração de registros. #299979

19/10/2005

0

Pessoal,

Estou montando uma agenda que será utilizada em vários micros.
Ela é montada com os horários agendados e com os horarios disponiveis.
Toda vez q é realizada alguma operação como Novo Agendamento, Alteração ou Exclusão, a geração da agenda é refeita devido aos tempos de agendamentos mudarem.. ou seja, um agendamento pode ter 30 minutos o outros pode ter 1hora... mas a agenda exibe os horarios de 30 em 30 minutos.
a agenda é separada por profissional/data.
posso ter um ou mais micros acessando o mesmo profisional na mesma data.
a tabela de agenda possui um filtro para o profissional/data selecionado, exibindo então só os agendamentos daquele dia.

Essa tabela de agenda tem uma PK com o campo CD_Agenda.

Eu realizo a geração da agenda com varios calculos e todo esse processo está dentro de um StartTransaction e um Commit após concluir tudo.

Por exemplo, se eu tiver 2 micros acessando ao mesmo tempo e ambos clicarem pra gerar a agenda tenho problema de PK pq existe um outro que já está gerando.

Como posso resolver? Teria como por exemplo alocar um intervalo de código ao iniciar a geração?

agradecido
Diogo


Diogoalles

Diogoalles

Responder

Posts

19/10/2005

Bruno Belchior

Utilize um Generator (No caso de Firebird)... a sua idéia é justamente essa, ficar fora do contexto da tranzação, uma vez que códigos nunca devem ser dados reais...


Responder

Gostei + 0

19/10/2005

Diogoalles

olá Bruno

Bem, eu utilizo FB 1.5 e não conheço na pratica Generators.
Eu tenho a minha tabela com o CD_Agenda do tipo Integer.
Esta tabela já possuem muitos dados, apesar de ser sequencial existem registros que são excluidos, então não tenho uma sequencia certa. Isso não poderá me trazer problemas?
Só para ver se entendi bem, se eu usar generator para esse campo PK, mesmo utilizando vários micros na mesma tabela para inserção ou edição de registros, e utilizando StartTransaction e Commit, não terei problemas?

O generator faz algum tipo de ´reserva´ de código?

agradecido
Diogo


Responder

Gostei + 0

19/10/2005

Bruno Belchior

ele não exatamente ´reserva´ ele simplismente não entra no contexto de transação... exemplo, se você abre uma e incrementa um generator, não é necessário comitá-la para esse valor ser alterado, ou mesmo se você cancelar a transação o valor não voltará ao original, então é improvável que seu código irá repetor-se... só lembrando que você devera colocar o valor do seu generator, igual ou superior ao maior código que tenha na tabela... :wink:


Responder

Gostei + 0

19/10/2005

Diogoalles

Blz ótimo entendi..

Só uma duvida.
Para atualizar os clientes eu tenho um prog q roda o script de banco.
Como vou fazer para definir o valor inicial do generator se cada cliente tem um nº diferente d registros?

obrigadão ai cara

abraço
Diogo


Responder

Gostei + 0

19/10/2005

Bruno Belchior

veja qual é o maior e substitua no XX na seguinte linha
set generator NomeDoGenerator to XX



Responder

Gostei + 0

19/10/2005

Diogoalles

eu teria q fazer algo assim
só q ñ funciona

SET GENERATOR GEN_AGENDA TO (SELECT MAX(CD_AGENDA) FROM TBLAGENDA);

:( :(


Responder

Gostei + 0

19/10/2005

Bruno Belchior

é isso realmente não funciona (mas poderia né :D , não sei na versão 2.0), algo assim só com SP... :wink:


Responder

Gostei + 0

19/10/2005

Diogoalles

Pessoal

Estou criando um generator para um tabela.
Só que já possuo muitos clientes e utilizando o sistema cada um com muitos registros nessa tabela.

SET GENERATOR NomeGenerator TO Valor;

onde indica o valor eu precisaria ter como colocar um MAX da tabela para ser o valor inicial

tipo

SET GENERATOR Gen_Agenda TO [color=red:f9871b16bb](SELECT MAX(N_Agenda) FROM Agenda)[/color:f9871b16bb];

obrigado
Diogo


Responder

Gostei + 0

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

Aceitar