Aplicacao Cliente/Servidor qual melhor maneira p/ Atualizar
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.
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
Curtidas 0
Respostas
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.
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
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
Utilizo:
Ferramenta de Trabalho: Delphi 7
Componentes: IBDataBase, IBTransaction, IBDataSet
Banco de Dados: FireBird 1.0
GOSTEI 0
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+
|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
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.
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
26/08/2003
Que aula amigo, heheheheheh .... :wink:
GOSTEI 0
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+
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