Ir para conteúdo
Fórum Script Brasil
  • 0

Como evitar que outros usuários editem um registro ao mesmo tempo


Guest --Sérgio --

Pergunta

Guest --Sérgio --

Bem já tenho o MySql configurado e funcionando e todas as estações

acessam o bd normalmente. Mas o que desejo, é que quando um

usuário colocar um dado registro sob edição, que os demais não o

possam fazê-lo também. E não é isso que está acontecendo, todos

estão podendo atualizar o mesmo registro e ao mesmo tempo. O

que preciso saber é como travar esse registro ou como detectar

uma alteração no registro em edição, que tenha sido, simultaneamente

editado por um outro usuário.

O código simplificado que estou usando é o seguinte:

INCLUSÃO

procedure TForm1.SpeedButtonNovoClick(Sender: TObject);
begin
TabelaAtiva := DataModule2.findcomponent(QueryAtiva);
if assigned(TabelaAtiva) then
   begin
    registro := TZQuery(TabelaAtiva).RecNo;
    TZQuery(TabelaAtiva).RequestLive := True;
    TZQuery(TabelaAtiva).Append;
    SetButtons;
   end;
end;
ALTERAÇÃO
procedure TForm1.SpeedButtonEditaClick(Sender: TObject);
begin
TabelaAtiva := DataModule2.findcomponent(QueryAtiva);
if assigned(TabelaAtiva) then
   begin
    TZQuery(TabelaAtiva).RequestLive:= True;
    TZQuery(TabelaAtiva).Edit;
    DBEdit1.Selstart:= Length(DBEdit1.text);
    DBEdit1.SetFocus;
    SetButtons;
   end;
end;
GRAVAÇÃO
procedure TForm1.SpeedButtonGravaClick(Sender: TObject);
begin
TabelaAtiva := DataModule2.findcomponent(QueryAtiva);
if assigned(TabelaAtiva) then
   begin
    TZQuery(TabelaAtiva).ApplyUpdates;
    TZQuery(TabelaAtiva).RequestLive := False;
    SetButtons;
   end;
end;
REVERSÃO
procedure TForm1.SpeedButtonReverteClick(Sender: TObject);
begin
 TabelaAtiva := DataModule2.findcomponent(QueryAtiva);
if assigned(TabelaAtiva) then
   begin
    If TZQuery(TabelaAtiva).State = dsInsert then
       Begin
         TZQuery(TabelaAtiva).RevertRecord;
         TZQuery(TabelaAtiva).RecNo := registro;
       end
    Else
    TZQuery(TabelaAtiva).RevertRecord;
    TZQuery(TabelaAtiva).RequestLive := False;
    SetButtons;
   end;
end;

Editado por Micheus
Revertido. ;-)
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
Mas o que desejo, é que quando um

usuário colocar um dado registro sob edição, que os demais não o

possam fazê-lo também. E não é isso que está acontecendo, todos

estão podendo atualizar o mesmo registro e ao mesmo tempo. O

que preciso saber é como travar esse registro ou como detectar

uma alteração no registro em edição, que tenha sido, simultaneamente

editado por um outro usuário.

De uma lida atentamente neste artigo, vai sanar a sua dúvida e de outros membros

http://www.comunidade-firebird.org/cflp/do...s/CFLP_T032.PDF

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
De uma lida atentamente neste artigo, vai sanar a sua dúvida e de outros membros

http://www.comunidade-firebird.org/cflp/do...s/CFLP_T032.PDF

Apenas lembrando que este artigo é para Firebird e Interbase.

No MySQL (banco usado pelo Sergio), a sintax é um pouco diferente, deverá aparecer ao final do select:

FOR UPDATE LOCK IN SHARE MODE

ver Manual de referência do MySQL - Sintax SELECT.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, Sérgio!

Por solicitação do Micheus, passo a dar apoio a este tópico com o intuito de orientá-lo da melhor forma. Para tal, solicito que você informe o tipo de engine que você está utilizando em suias tabelas. InnoDB ou MyISAM ou Outro? Se Outro Qual o Engine?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...