Aplicacao Cliente/Servidor qual melhor maneira p/ Atualizar

Delphi

26/08/2003

Bom dia pessoal.

Qual a melhor maneira para atualizar o terminal com os dados que esta gravado no servidor.

Ex: Tenho 2 terminais e cada um deles um usuário cadastrando uma lista de produtos. 1º Usuário cadastrou o produto 1001 e o 2º foi tentar cadastrar o produto 1001 e recebeu uma mensagem dizendo que o produto 1001 já foi cadastro.

Então qual a melhor maneira que se deve utilizar para gravar o registro no banco de dados para que se um outro terminal tentar cadastrar receba uma mensagem.

Pertunta:

1º) Qual processo de gravação deve utilizar Commit ou CommitRetaining?
2º) Se eu utilizar o Commit, a rede ficara lenda?
3º) Ou se eu utilizar o CommitRetaining a rede ficara lenda?

Obs: Os usuários ficaram cadastrando o dia todo então não posso ter lentidão nos processos.


[color=blue:49b14ccc3b]Informacao:[/color:49b14ccc3b]
Por favor, passem um exemplo de como eu devo gravar os registro e como eu faço para que os outros terminais fiquem atualizados a sim que eu terminal gravar um registro.


Ferramenta de Trabalho: Delphi 7
Componentes: IBDataBase, IBTransaction, IBDataSet
Banco de Dados: FireBird 1.0

Agradeco a ajuda de todos.


Rodrigo Ferreira

Rodrigo Ferreira

Curtidas 0

Respostas

Machado

Machado

26/08/2003

a) crie uma procedure para uso no evento onactive

procedure tform1.formrefresh(sender:tobject);
begin
table1.refresh;

...

tablen.refresh;
end;

b) no evento onactive do formulario acrescente a linha

application.onactive := formrefresh;

c) No evento onshow fo formulario acrescente a linha

formrefresh(sender);

d) no evento onafterpost de cada tabela acrescente as linhas

table.flushbuffers;
formrefresh(self);

ha mais uma coisa coloque no evento ofterpost a seguinte linha
dbisavechanges(table.handle);

ai testa ai, deve funcionar. depois de testar fala aqui pra nós de deu certo falow.


GOSTEI 0
Rodrigo Ferreira

Rodrigo Ferreira

26/08/2003

Claro amigo a propriedade [flushbuffers] nao existe no componente IBDataSet.... Ok

Utilizo:

Ferramenta de Trabalho: Delphi 7
Componentes: IBDataBase, IBTransaction, IBDataSet
Banco de Dados: FireBird 1.0


GOSTEI 0
Afarias

Afarias

26/08/2003

|Então qual a melhor maneira que se deve utilizar para gravar o registro
|no banco de dados para que se um outro terminal tentar cadastrar
|receba uma mensagem.

Deixe o terminal tentar gravar... se ele tentar registrar algo contra as regras do banco (um PK por exemplo) o banco não deixa e gera um erro, vc trata esse erro e mostra uma mensagem sua para o usuário.


|1º) Qual processo de gravação deve utilizar Commit ou
|CommitRetaining?

Use CommitRetaining apenas quando precisa manter a transação aberta para mostrar algo num grid ou coisa assim. Más -- Procure sempre q possível usar um COMMIT (por exemplo, quando o formulário for fechado ou sei lá)


|2º) Se eu utilizar o Commit, a rede ficara lenda?

NÃO. más -- se *não* usar, com o tempo o sistema pode ficar lento


|3º) Ou se eu utilizar o CommitRetaining a rede ficara lenda?

SIM. se vc usar sempre commitretaining e nunca usar commits é possível q sua aplicação fique lenta com o tempo.


|Por favor, passem um exemplo de como eu devo gravar os registro e
|como eu faço para que os outros terminais fiquem atualizados a sim que
|eu terminal gravar um registro.

Não atualize os terminais -- ISSO DEIXA O SISTEMA LENTO -- quem tem que estar atualizado é o servidor. Se altem tentar gravar algo q não pode o banco não deixa e da erro, trate o erro.


Com relação aos comentário do Machado, acho q ele não reparou q vc usa Interbase (achou q usa Paradox) -- o código sugerido é totalmente contra sistemas C/S


T+


GOSTEI 0
Jeová Soares

Jeová Soares

26/08/2003

:arrow: Para evitar a mensagem de erro de que o já existe o registro com o número informado já existe, eu uso o seguinte:
Antes de gravar o registro mando o sistema buscar o número do último registro cadastrado, aí então, somo no mesmo + 1, ou seja, no momento do cadastramento não informo o número, deixo q o sistema busque o próximo número como num autoincremento.


GOSTEI 0
Rodrigo Ferreira

Rodrigo Ferreira

26/08/2003

Que aula amigo, heheheheheh .... :wink:


GOSTEI 0
Machado

Machado

26/08/2003

[quote:9f85bc78c1=´Rodrigo Ferreira´]Claro amigo a propriedade [flushbuffers] nao existe no componente IBDataSet.... Ok

Utilizo:

Ferramenta de Trabalho: Delphi 7
Componentes: IBDataBase, IBTransaction, IBDataSet
Banco de Dados: FireBird 1.0[/quote:9f85bc78c1]

Desculpe pelo erro, não havia reparo que vc não utiliza paradox.
t+


GOSTEI 0
POSTAR