Array
(
)

Ler arquivo txt como modo exclusivo!

Paullsoftware
   - 08 fev 2006

Galera na empresa onde trabalho possue dois sistemas um que eu desenvolvi e outro da própria empresa feita por outro programador, mais vamos ao que interessa...

o meu sistema é apenas para serviços e pega informações do outro sistema para poder liberar os serviços, até hoje o meu sistema era atualizado todos os dias as 08h e as 12h só que, agora tenho que fazer isso em tempo real e o programador teve uma ideia. Assim que alguém fizer uma alteração no cadastro do cliente, pagamento, exclusão, atualização ou qq outra alteração será criado um arquivo de txt para com as informações, dai ele falou: ´Você tem que criar uma rotina para tentar ler o arquivo a cada 10 segundos por exemplo, ler o arquivo, verificar as informações existentes e e depois apagar depois que terminar a leitura, ai vem o problema, quando tento abrir o arquivo para escrever nele dis que o arquivo já está aberto no modo exclusivo e tenho que fazer um loop para ficar lendo o arquivo até ele ser liberado!
quando for liberado, leio as informações, comparo com as atuais e atualizo se necessário... mais não sei como fazer esse ´looping´....


Sourcecode
   - 08 fev 2006

Seu software utiliza qual banco de dados? Se fosse um sgdb como o firebird por exemplo você poderia utilizar replicação de dados através de triggers, que seria uma solução muito mais prática para isso...


Paullsoftware
   - 09 fev 2006

Uso Interbase mais são sistemas e bases diferentes...
inclusive o meu sistema(banco) fica em um servidor e o sistema(banco) da empresa fica em outro..

a solução que encontramos foi essa, ele cria um arquivo sempre que houver mudanças na base dele que seja de importânica para a minha aplicação e eu leio a informação e em seguida dou um rewrite no arquivo só que quando a minha aplicação ler e tenta escrever da um erro disendo que o arquivo foi aberto por outro processo no modo excluisivo.


Massuda
   - 09 fev 2006

A solução mais simples seria fazer um loop tentando abrir o arquivo...#Código

var
Dados: TextFile;
...
AssignFile(Dados, ´drive:/path/para/seu/arquivo.txt´);
repeat
{$I-}
Reset(Dados);
{$I+}
until IOResult = 0;
...
O teste com IOResult é para saber se deu erro ao abrir o arquivo. Adapte o código para suas necessidades.


Paullsoftware
   - 09 fev 2006

Grande massuda, vou testar e posto o resultado! valeu...


Aroldo Zanela
   - 09 fev 2006

Colega,

Na paleta Samples tem um componente denominado TShellChangeNotifier que permite monitorar uma determinada pasta. Vocês podem definir uma pasta para o intercâmbio de informações e além do arquivos de dados, criar uma arquivo para sinalizar a conclusão de gravação (p.e: fim.txt).


Sourcecode
   - 09 fev 2006

Só questiono uma coisa a você, PaullSoftware, se um dia quando for gravar o txt a máquina travar (acabar energia, access violation, virus, etc...) e não gravar o arquivo... acho que essa solução poderia gerar inconsistências, não to querendo criticar, de forma alguma, já pensou nessas possibilidades? ;)


Paullsoftware
   - 16 fev 2006


Citação:
Só questiono uma coisa a você, PaullSoftware, se um dia quando for gravar o txt a máquina travar (acabar energia, access violation, virus, etc...) e não gravar o arquivo... acho que essa solução poderia gerar inconsistências, não to querendo criticar, de forma alguma, já pensou nessas possibilidades? ;)


ok kra valeu pelo toque...
madamos de estratégia, estou usando uma Thread para executar as alterações que funciona assim...

ele toda verificando se o sistema da Empresa sofreu alguma alteração nos dados que me são importantes como:
Inclusão de Novo cliente;
Atualização de Dados do Cliente;
Pagamentos;
Pendencias;
...
assim que ele detecta um dessas alterações ele cria um arquivo txt que chamei de ´Online.txt´, e em seguida, manda as informações para o Meu sistema. Que por sua vez verifica se os dados no arquivo são novos faz uma pesquisa no meu bando para ver se as mudanças são verdadeiras e depois apaga o arquivo ´Online.txt´...