Fórum Firebir na Rede - Autalizar em tempo real #350965
21/12/2007
0
É o seguinte... eu tenho um sistema rodando em Firebird 2.0 com componentes de acesso da palheta Interbase... há 3 máquinas acessando o banco de dados ao mesmo tempo... todas conseguem visualizar e alterar dados... porém... as alterações que qualquer máquina faça só vai ser vista pela outra quando o usuário fechar o sistema e abri-lo novamente... o que é muito chato ! Como eu faço para que as alterações que qualquer terminal faça seja refletido automaticamente para os demais ? Sou inicante neste ramo de programação Cliente-Servidor, então se por gentileza alguem me puder ajudar passo a passo agradeço muito...
Grato pela atenção de todos...
Tiagojmilam
Curtir tópico
+ 0Posts
21/12/2007
Techsoft
Eu usei interbase já tem um tempo, mas você pode usar transações, uma vez que faça o commit da transação, os dados garantidamente serão visíveis aos demais usuários do sistema.
Gostei + 0
21/12/2007
Tiagojmilam
Eu estou dando um commitretaming no transaction que está ligado a base de dados... mas mesmo assim... não atualiza nas outras estações...
Valew !
Gostei + 0
22/12/2007
Aasn
1) através de um timer, a cada intervalo dá um refresh nos dados;
ou
2) capturando os eventos do BD através do IBEvent, que é bem mais complicado.
caso contrário, nada feito!
[]´s
AASN
Gostei + 0
22/12/2007
Tiagojmilam
O que eu devo colocar de código nees timer ? e vai ser um timer só pra todo o aplicativo .. ou tem que ser um pra cada Query ?
Valew !!!
Gostei + 0
22/12/2007
Luciano.badoe
Eu faço da seguinte forma utilizando 3 procedures do Luciano Pimenta:
Para iniciar a transação:
Auxiliar de Start
Para comitar transação pendente
Para cancelar a transação pendente
procedure TDM.Rollback; begin SQLConnection1.Rollback(Transc); raise Exception.Create(MSG_ERRO); end;
Eu uso a START antes de um bloco try/except com Store Procedure para
persistir os dados no DB e em seguida uso a COMMIT para comitar a transação.
Caso ocorra algum problema, no except uso o ROLLBACK.
É pratico e funciona 100¬.
Abraço.
Gostei + 0
22/12/2007
Micheus
Dê um duplo click no seu componente TIBTransaction e veja como está sua configuração.
Por ex., se você configurar como Snapshot, os dataset ligados a esta transação ´irão tirar uma foto´ no momento de sua abertura (open ou active) não ´enxergando´ alterações de qualquer outra transação.
Se vc nunca mexeu nele, na tela que aparece, não deve haver um tipo de transação setada.
Vou sugerir uma opção que utilizo (customizada), assim, não se preocupe me selecionar qualquer umas das disponíveis. Coloque na caixa de texto [i:73250798ad]Settings[/i:73250798ad] os seguintes parâmetros (é só copiar e colar):
[i:73250798ad]read,
write,
read_committed,
rec_version,
nowait[/i:73250798ad]
Tem um artigo sobre o assunto que pode ser interessante ler: ´Entendendo os tipos e configurações das transações´ (Autor: Claudio Valderrama; Tradução/Adaptação : Carlos Henrique Cantu - FireBase)
É necessário registrar-se no site [url=http://www.firebase.com.br/fb/]FireBase[/url] para acessá-lo, vou deixar uma versão em PDF neste [url=http://www.4shared.com/file/24569384/88e77aca/Entendendo_os_tipos_e_configuracao_de_transacoes.html]link[/url]
Gostei + 0
23/12/2007
Tiagojmilam
Eu dei dois cliques no Transaction e realmente das opções que há lá não estão nenhuma delas selecionadas .. e há um campo para digitação, lá eu coloquei estas instruções que me passou e não selecionei nenhuma opção !
read,
write,
read_committed,
rec_version,
nowait
Porém quando eu dou um RUN no projeto ele dá o seguinte erro :
TPB Constant () is unknown
Porque será que deu esse erro ?
Valew pela ajuda !!!
Gostei + 0
25/12/2007
Micheus
Pelo que andei investigando, muito provavelmente seria [i:fcc14add68]rec_version[/i:fcc14add68]. Aparentemente o componente da paleta IBX não o reconhece desta forma (é que eu utilizo os componentes MDO, e neste caso não há problemas), então escreva ele assim: [i:fcc14add68]record_version[/i:fcc14add68]
e tente novamente.
Este texto, será depois convertido para um número (constante a ser utilizada na inicialização da transação). Dá para ver [url=http://www.koders.com/noncode/fid4E63A32C796CA2049C3F42D1F6413049E28102F4.aspx]nesta[/url] codificação que este texto será trocado pela constante [i:fcc14add68]isc_tpb_rec_version[/i:fcc14add68].
Um artigo que fala um pouco sobre estes níveis de isolamento: [url=http://www.guiadodelphi.com.br/ler.php?codigo=1103]O que é uma transação?[/url] (ref. Guia do Delphi)
Abraços
Gostei + 0
26/12/2007
Pestana_
Aproveitando o tópico eu agradeceria muito se você me respondesse uma dúvida minha, já procurei na web, mas eu não consegui entender as configurações (read e write) qual o efeito em relação aplicação?
estou utilizando um Transaction na aplicação.
Obrigado,
Pestana.
Gostei + 0
26/12/2007
Micheus
Além dos links que postei anteriormente, há mais este artigo, [url=http://www.comunidade-firebird.org/cflp/downloads/CFLP_T032.PDF]Como travar um registro em Interbase/Firebird[/url] (ref. Comunidade Firebird), bastante interessante e de onde tiro o trecho abaixo, visto que envolve parte das configurações que sugeri:
[color=blue:4019ebf16d][i:4019ebf16d](...) Você poderia usar o nível de isolamento read_commited rec_version junto
com o modo de espera (wait), mas não é bom usar esse recurso dessa forma. Em tese, o
read_commited / rec_version / wait garantem 100¬ que você vai obter os resultados necessários.
Mas este modo de travamento requer mais atenção durante o projeto de acesso aos dados. (...)[/i:4019ebf16d][/color:4019ebf16d]
Gostei + 0
26/12/2007
Pestana_
Eu estava olhando alguns artigos ´inclusive a que você sugeriu´ e não estou conseguindo entender o porque da existência de mais de uma transação (p. ex.: uma transação para escrita (inserir, atualizar e deletar registros) e outra somente leitura (select)).
Neste [url=http://scriptbrasil.com.br/forum/index.php?showtopic=81370]tópico[/url] você citou que utiliza duas transações uma para (Read) e outra para (Update). Porque você utiliza este método, qual o objetivo?
estou tentando montar uma configuração de transação que seja mais adequada para meu sistema.
no sistema, tenho dbgrid e edits:
1- os dados são apresentados no dbgrid como somente leitura.
2- utilizo edits para incluir, alterar e excluir registros (não utilizo componentes dataware exceto o dbgrid).
Gostei + 0
27/12/2007
Khundalini
O que teria que fazer é um refresh periodico nos dados. O problema se agrava ainda mais se usarmos ClientDataSet, uma vez que os dados são consultados uma única vez ao servidor, e a conexão é fechada (isso se estiver usando dbExpress com a propriedade KeepConnection = False, para garantir mais performance).
Sds.,
Rubem Rocha
Manaus, AM
Gostei + 0
27/12/2007
Pestana_
não sei se entendi, mas estou querendo que a Transação faça esse trabalho, depois eu atualizo o DataSet (abrir e fechar ou refresh) atravês de Eventos do FB, com isso acho que não precisava atualizar periodicamente o DataSet.
se eu estiver errado alguem por favor me corrija.
Gostei + 0
27/12/2007
Khundalini
Saiba vc que o método Refresh(), nas classes descendentes de TDataSet (ex.: TClientDataSet) funcionam de maneiras diferentes.
Sds.,
Rubem Rocha
Manaus, AM
Gostei + 0
27/12/2007
Pestana_
[b:8038f89542]Micheus[/b:8038f89542] andei estudando os tópicos que você sugeriu e acho que as configurações para o IBTransaction seria essas: está correto?
[i:8038f89542]read_committed,
rec_version,
nowait[/i:8038f89542]
estou querendo montar as configurações de acordo com está citação acima.
me ajude a salvar está semana hshshshs
agradeço antecipadamente,
Pestana.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)