Fórum Sql verifiquem esse codigo #153549
09/04/2003
0
Caro colegas programadores...tenho um sistema em paradox feito em delphi5, esse sistema vai rodar em rede local, já instalei o sistema e executa normal...o problema é quando 2 clientes tentam cadastrar ao mesmo tempo uma informação...tipo, cliente A começou a cadastrar mais ainda nao salvou e cliente B também começou cadastrar e salvou primeiro que o cliente A, quando o cliente A, vai salvar vem uma ´Key Violation´, violação de chave ok!, como se a chave fosse duplicada....no entanto quando tento salvar novamente ele salva norma e não vem a mensagem... é como se não estivesse sendo atualizado??
vejam o código abaixo:
tenho um a QryCliente, TbCliente e DSCliente
Na propriedade SQL tenho:
SELECT MAX(CODCLIENTE) FROM TBCLIENTE
No evento BeforePost da tabela tenho:
procedure TDM.TBClienteBeforePost(DataSet: TDataSet);
begin
IF DM.DSCLIENTE.State = DSINSERT THEN
BEGIN
QRYCLIENTE.Close;
QRYCLIENTE.OPEN;
QRYCLIENTE.Refresh;
WITH QRYCLIENTE.Fields[0] DO
BEGIN
IF ISNULL THEN
TBCLIENTECODCLIENTE.Value := 1
ELSE
TBCLIENTECODCLIENTE.Value := ASINTEGER + 1;
END;
END;
end;
fernandocneto@zipmail.com.br
vejam o código abaixo:
tenho um a QryCliente, TbCliente e DSCliente
Na propriedade SQL tenho:
SELECT MAX(CODCLIENTE) FROM TBCLIENTE
No evento BeforePost da tabela tenho:
procedure TDM.TBClienteBeforePost(DataSet: TDataSet);
begin
IF DM.DSCLIENTE.State = DSINSERT THEN
BEGIN
QRYCLIENTE.Close;
QRYCLIENTE.OPEN;
QRYCLIENTE.Refresh;
WITH QRYCLIENTE.Fields[0] DO
BEGIN
IF ISNULL THEN
TBCLIENTECODCLIENTE.Value := 1
ELSE
TBCLIENTECODCLIENTE.Value := ASINTEGER + 1;
END;
END;
end;
fernandocneto@zipmail.com.br
Fernandocneto
Curtir tópico
+ 0
Responder
Posts
10/04/2003
Anonymous
voce devera salvar fisicamente a tblcliente para que o outro micro possa pegar o max com o registro ja incluído.
utilize o DBISaveChanges no evento afterPost.
utilize o DBISaveChanges no evento afterPost.
Responder
Gostei + 0
10/04/2003
Okama
Aconselho duas coisas:
use auto-incremento ou
crie uma tabela de controle que gere o código para o cliente. Ex:
Tablecontrole.Open;
numero := TableControle.fieldbyName(´codcli´).asInteger;
TableControle.Edit;
TableControle.fieldbyName(´codcli´).Value := Numero+1;
TableControle.Post;
use auto-incremento ou
crie uma tabela de controle que gere o código para o cliente. Ex:
Tablecontrole.Open;
numero := TableControle.fieldbyName(´codcli´).asInteger;
TableControle.Edit;
TableControle.fieldbyName(´codcli´).Value := Numero+1;
TableControle.Post;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)