[firebase-br] Dúvida com transação x refresh
Magno System
magno em speet.com.br
Qui Abr 14 15:03:40 -03 2011
A sua idéia mesmo do clientdataset.
Veja o email que enviei:
"Paulo, isto é uma excelente idéia. Assim eu vou ter uma segurança maior e
dormir com a consciência tranquila."
Agradeço muito por esta idéia.
P.S.: Na realidade eu expliquei este processo, só mesmo para documentar o
ocorrido e para se alguém algum dia passar pela mesma situação fica aí
documentado.
----- Original Message -----
From: "Paulo Portella" <pportellaa.firebase em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Thursday, April 14, 2011 2:51 PM
Subject: Re: [firebase-br] Dúvida com transação x refresh
Apenas sugeri uma possibilidade.
E qual a sua idéia então para a solução ?
Vida de americano é assim: iPhone, iPod, iPad, iMac….
Já a de brasileiro é assim:IPTU, IPVA, ICMS, IPI etc
Em 14/04/2011 13:57, Magno System escreveu:
> Na realidade o servidor no nosso sistema não observa nada. Tudo é feito
> pela estação. Quando instalamos o nosso sistema, também é instalado como
> serviço um servidor ftp no próprio servidor onde está o banco de dados. A
> principio este servidor ftp serviu somente para deixar a versão do
> executável mais recente e para as estações baixarem a atualização. Agora
> ele tem uma outra função. Existe um thread no nosso sistema que de tempo
> em tempo faz um BACKUP do banco no servidor e manda para o servidor FTP
> instalado no próprio servidor onde foi feito o backup.
>
> Existe uma outra thread em cada executável das estações que de tempo em
> tempo baixa o backup da FTP e já deixa restaurado na estação como um banco
> local.
>
> A cada queda de conexão com o servidor o sistema assume este banco local e
> passa a depositar as vendas nele. A cada finalização de venda o sistema
> manda um ping para o servidor. Usamos a função de ping dos componentes
> INDY que gasta milésimos de segundos para dizer se o servidor voltou ou
> não e somente se voltou o sistema conecta no banco do servidor e
> descarrega os dados.
>
> Cada venda descarregada no servidor é apagada do banco local. Usamos o
> commit de duas fases para garantir que a inserção no servidor e a deleção
> no banco local estejam dentro da mesma transação assegurando a integridade
> dos dados. Com o XML isto não seria possível, pois o XML não entra no
> contexto da transação do firebird.
>
>
>
> ----- Original Message ----- From: "Paulo Portella"
> <pportellaa.firebase em gmail.com>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Thursday, April 14, 2011 1:24 PM
> Subject: Re: [firebase-br] Dúvida com transação x refresh
>
>
> Então aqui estou vendo que você vai ter dois processos.
> 1o.) envio do PDV para o Servidor
> 2o.) Leitura desses arquivos PELO servidor.
>
> Sugestão -> salve o conteudo da Venda em arquivo (TXT ou XML, o
> ClientDataSet exporta nativamente para o XML e em tres formatos). Ou
> seja, o seu PDV faz um SELECT de tudo que ainda não foi enviado (melhor
> do que ficar percorrendo uma tabela do inicio ao fim) e então exporta
> individualmente arquivo por arquivo significando venda-por-venda.
> Pronto, você já exportou para um diretório qualquer.
>
> Agora o seu Servidor ficará "observando" aquele diretório de tempos em
> tempos, e toda vez que "pintou" um arquivo lá, ele então abre o seu
> conteúdo, transfere para a base local e "move" o arquivo lido para uma
> outra pasta de ARQUIVOS_LIDOS.
>
> Do jeito que você mostrou, acho ficará mais demorado, pois todo o
> sistema possui um Delay para perguntar -> Servidor? está online? sim?
> então lá vaiiiiii, não? puxa, tem certeza? vou esperar 3 segundos
> tá?..1....2....3... Servidor? voltou a ficar online? não? então tá, vou
> continuar vendendo aqui e na proxima finalização perguntarei novamente
> pra você... Tchau.!!!!
>
> Desculpe a brincadeira, mas eu não consigo resistir....Rsssss
>
> Vida de americano é assim: iPhone, iPod, iPad, iMac….
> Já a de brasileiro é assim:IPTU, IPVA, ICMS, IPI etc
>
>
> Em 14/04/2011 13:04, Magno System escreveu:
>> Não tem como. Eu apenas simplifiquei o processo para exemplificar. Na
>> realidade é uma rotina de PDV off-line. Eu tenho que verificar quantas
>> vendas tem para descarregar no servidor abrir um loop para correr cada
>> código de venda, e cada venda navegada dentro deste loop exportar a
>> tabela de caixa, tabela de estoque, tabela parcelas e outras mais que
>> pertence a esta venda. Uma vez exportada para o servidor eu apago a do
>> banco local. Estou usando um COMMIT de duas fases para garantir a
>> integridade. Cada venda que é descarregada no servidor e apagada no banco
>> local é uma transação.
>>
>> Estive pesquisando e acho que vou usar a transação CONCURRENCY
>> (REPEATABLE READ) na query do loop.
>>
>>
>> ----- Original Message ----- From: "Forrest®" <fernando.bg em gmail.com>
>> To: <lista em firebase.com.br>
>> Sent: Thursday, April 14, 2011 12:35 PM
>> Subject: Re: [firebase-br] Dúvida com transação x refresh
>>
>>
>> Em 14/04/2011 12:12, Magno System escreveu:
>>> Obrigado Paulo, mas acho que não expliquei direito.
>>>
>>> Vou colocar o procedimento:
>>>
>>> Query1 = SELECT CODIGOVENDA FROM VENDAS WHERE VENDA > :VENDA;
>>>
>>> While Query1.eof = false do
>>> Begin
>>> QueryOutroBanco = INSERT INTO VENDAS... (Insere no outro banco a o
>>> registro atual da query1)
>>> QueryDesteBanco = DELETE FROM VENDAS (Deleta o registro atual da query1)
>>> Query1.next;
>>> end;
>>>
>>> Note que são 3 querys. Uma para o loop (Query1), uma para inserção em
>>> outro banco (QueryOutroBanco) e outro para deleção no meu banco
>>> (QueryDesteBanco)
>>> Deste modo, preciso assegurar que o IBO não faça nenhum REFRESH em
>>> Query1 para que as deleções feitas por QueryOutroBanco não interfiram no
>>> loop.
>>
>> Boa tarde Magno
>>
>> Não é muito melhor fazer dessa forma ???
>>
>>
>> Query1 = SELECT CODIGOVENDA FROM VENDAS WHERE VENDA > :VENDA;
>>
>> While Query1.eof = false do
>> Begin
>> QueryOutroBanco = INSERT INTO VENDAS... (Insere no outro banco a o
>> registro atual da query1)
>> Query1.next;
>> end;
>>
>> Query1 = DELETE FROM VENDAS WHERE VENDA > :VENDA
>>
>> Se entendi bem o que você quer terá o mesmo efeito com menos componentes
>> e menos códigos.
>>
>> T++++++++++++++
>>
>>
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista