Problema de PK na geração de registros.
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
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
Curtidas 0
Respostas
Bruno Belchior
19/10/2005
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...
GOSTEI 0
Diogoalles
19/10/2005
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
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
GOSTEI 0
Bruno Belchior
19/10/2005
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:
GOSTEI 0
Diogoalles
19/10/2005
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
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
GOSTEI 0
Bruno Belchior
19/10/2005
veja qual é o maior e substitua no XX na seguinte linha
set generator NomeDoGenerator to XX
GOSTEI 0
Diogoalles
19/10/2005
eu teria q fazer algo assim
só q ñ funciona
SET GENERATOR GEN_AGENDA TO (SELECT MAX(CD_AGENDA) FROM TBLAGENDA);
:( :(
só q ñ funciona
SET GENERATOR GEN_AGENDA TO (SELECT MAX(CD_AGENDA) FROM TBLAGENDA);
:( :(
GOSTEI 0
Bruno Belchior
19/10/2005
é isso realmente não funciona (mas poderia né :D , não sei na versão 2.0), algo assim só com SP... :wink:
GOSTEI 0
Diogoalles
19/10/2005
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
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
GOSTEI 0