Fórum Acesso a bd #168146

07/07/2003

0

Olá pessoal,

Estou com um probleminha em minha aplicação, todos os usuários estão acessando o mesmo registro, em rede.
Eu coloquei em meu formulário de cadastro o seguinte, no evento OnCreate:
-----------------------------------------------------------------------------------
DMDados.TBCadastro.FlushBuffers;
-----------------------------------------------------------------------------------


No evento OnEditError da tabela TBCadastro:
-----------------------------------------------------------------------------------
procedure TDMDados.TBCadastroEditError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
Var
wErro, wRet: Word;
begin
If E is EDBEngineError Then
Begin
wErro:=(E as EDBEngineError).Errors[1].ErrorCode;
If (wErro = 10241) Then
Begin
wRet:=Application.MessageBox(´Outro usuário está editando este registro!´+#13+´Tentar novamente?´,´ARENÇÃO´, MB_YESNO + MB_ICONQUESTION);
If wRet = IDYes Then
Action:=daRetry
Else
Action:=daAbort;
End;
End;

end;
-----------------------------------------------------------------------------------


E no evento OnPostErro da tabela TBCadastro:
-----------------------------------------------------------------------------------
procedure TDMDados.TBCadastroPostError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
Var
ErroMens :String;
begin
ErroMens := E.Message;
if ErroMens = ´Key violation.´ then begin ShowMessage(´Duplicação na Chave Primária.´);
action := daAbort;
End;

end;
-----------------------------------------------------------------------------------

Mas só q se um usuário mandar editar um registro q já está sendo utilizado por outro a mensagem não aparece e este segundo usuário acessa tranqüilamente o registro.

O q mais posso fazer para q dois ou mais usuários não editem o mesmo registro?

Grato,

Ilano.


Ilanocf

Ilanocf

Responder

Posts

07/07/2003

Fernando

Use o seguinte
No Evneto EditErro da Tabela

procedure Tdm11.tb_ItensEditError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
var wErro : Word;
begin
// Cheque a editcao de registro por outro usuario
If e is EDBEngineError then
begin
wErro :=(E as EDBEngineError).Errors[1].ErrorCode;
If (wErro = 10241) then
begin
If pos(´locked´,e.message) > 0 then
begin
F_Mensagem.Label1.Caption :=´Atenção.´;
F_Mensagem.Label2.Caption :=´O usuário da estação ´+GetErrorInfo(ecUSERNAME);
F_Mensagem.Label3.Caption :=´esta alterando este mesmo registro!. Aguarde !´;
F_mensagem.ShowModal;
Action :=daAbort;
end;
end;


end;

se der algum problema me avise


Responder

Gostei + 0

07/07/2003

Ilanocf

Olá Fernando,

Ao tentar conectar o programa do computador B com a base de dados no computador A(servidor), está dando o seguinte erro:

Exception EDBEngine Error in module CENTEC.EXE at 000878B2.
Directory is controlled by other.NET file.
Directory: C:\
File: \\15dep06\C\Juazeiro\Dados\PDoxusrs.lck


No BDE eu configurei o seguinte:
Path: \\15dep06\C\Juazeiro\Dados

PARADOX: \\15dep06\C\Juazeiro\Dados
System/INIT: LOCAL SHARE: True

Tem alguma coisa errada nisso?


Responder

Gostei + 0

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

Aceitar