[firebase-br] Dúvida com transação x refresh

Paulo Portella pportellaa.firebase em gmail.com
Qui Abr 14 15:20:10 -03 2011


;-)

Vida de americano é assim: iPhone, iPod, iPad, iMac….
Já a de brasileiro é assim:IPTU, IPVA, ICMS, IPI etc


Em 14/04/2011 15:03, Magno System escreveu:
> 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
>
> ______________________________________________
> 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