Atualização automática Exe Banco de dados
Boa tarde,
To precisando de uma função que retorne se determinado arquivo está em uso, no servidor.
Isso para que seja possível atualizar o banco de dados, e após atualizar o executável, sem precisar visitar o cliente para isso, a parte do exe até que não é tão complicada, pois é so fechar o exe na estação e copiar o que estiver no servidor.
Pensei no seguinte, enquanto existir arquivos abertos(do banco de dados) no servidor, a sistema ficaria num laço mostrando uma mensagem do tipo (Feche o sistema em todas a as estações para proseguir).
Utilizo Delphi + Paradox.
Toda vez que se abre uma tabela paradox, é gerado no diretório dois arquivos .Lck, uma colega me passou a dica de verificar esses arquivos se eles existem é porque teóricamente alguma tabela está aberta. Agora alguem sabe, se por exemplo acabar a força qual seria o comportamento desse arquvio?
[b:882d1f81ea] fiz um teste preliminar e deu certo da seguinte forma
while (fileexists(caminho\*.lck))do
begin
showmessage(´Arquivo em uso´);
end;[/b:882d1f81ea]
aparentemente funciona, mas ainda não tenho 100¬ de certeza.
Obrigado um grande abraço
________
Júnior
To precisando de uma função que retorne se determinado arquivo está em uso, no servidor.
Isso para que seja possível atualizar o banco de dados, e após atualizar o executável, sem precisar visitar o cliente para isso, a parte do exe até que não é tão complicada, pois é so fechar o exe na estação e copiar o que estiver no servidor.
Pensei no seguinte, enquanto existir arquivos abertos(do banco de dados) no servidor, a sistema ficaria num laço mostrando uma mensagem do tipo (Feche o sistema em todas a as estações para proseguir).
Utilizo Delphi + Paradox.
Toda vez que se abre uma tabela paradox, é gerado no diretório dois arquivos .Lck, uma colega me passou a dica de verificar esses arquivos se eles existem é porque teóricamente alguma tabela está aberta. Agora alguem sabe, se por exemplo acabar a força qual seria o comportamento desse arquvio?
[b:882d1f81ea] fiz um teste preliminar e deu certo da seguinte forma
while (fileexists(caminho\*.lck))do
begin
showmessage(´Arquivo em uso´);
end;[/b:882d1f81ea]
aparentemente funciona, mas ainda não tenho 100¬ de certeza.
Obrigado um grande abraço
________
Júnior
Zenior
Curtidas 0
Respostas
Marconi
23/03/2004
Pelo que voce escreve, está utilizando Paradox.
A melhor maneira de verificar é tentar atualizar o executável, que deve estar na rede. Se der erro é porque ele está sendo utilizado. Quando ninguem estiver utilizando o executável, consequentemente não estarão também utilizando o banco de dados.
...
try
CopyFile(novoexecutavel,antigoexecutavel,0);
except
....
Mensagem e erro
...
end;
Marconi
A melhor maneira de verificar é tentar atualizar o executável, que deve estar na rede. Se der erro é porque ele está sendo utilizado. Quando ninguem estiver utilizando o executável, consequentemente não estarão também utilizando o banco de dados.
...
try
CopyFile(novoexecutavel,antigoexecutavel,0);
except
....
Mensagem e erro
...
end;
Marconi
GOSTEI 0
Geno
23/03/2004
Boa tarde,
To precisando de uma função que retorne se determinado arquivo está em uso, no servidor.
Isso para que seja possível atualizar o banco de dados, e após atualizar o executável, sem precisar visitar o cliente para isso, a parte do exe até que não é tão complicada, pois é so fechar o exe na estação e copiar o que estiver no servidor.
Pensei no seguinte, enquanto existir arquivos abertos(do banco de dados) no servidor, a sistema ficaria num laço mostrando uma mensagem do tipo (Feche o sistema em todas a as estações para proseguir).
Utilizo Delphi + Paradox.
Toda vez que se abre uma tabela paradox, é gerado no diretório dois arquivos .Lck, uma colega me passou a dica de verificar esses arquivos se eles existem é porque teóricamente alguma tabela está aberta. Agora alguem sabe, se por exemplo acabar a força qual seria o comportamento desse arquvio?
[b:410d61fa2c] fiz um teste preliminar e deu certo da seguinte forma
while (fileexists(caminho\*.lck))do
begin
showmessage(´Arquivo em uso´);
end;[/b:410d61fa2c]
aparentemente funciona, mas ainda não tenho 100¬ de certeza.
Obrigado um grande abraço
________
Júnior
Companheiro...o que vc chama de atualizar o banco, seria uma atualizacao dos arquivos MB(ou coisa do tipo, eskeci a extensao dos arquivos de tabela do paradox) no servidor? Eh isso?
Vc quer substituir esses arquivos?
Bom...nao entendo muito de como vc ta fazendo esse servidor ai com o paradox. Como vc faz as instancias do banco nesse servidor?
Vc usa um servidor de de aplicação? Ou seja, uma apliacacao em 3 camadas? Ou vc faz conexao direta mesmo, cliente servidor?
Eh que eu ate tenho uma solucao, mas acredito que so funcionaria se fosse numa aplicacao 3 camas, onde vc tivesse o servidor da aplicação rodando no seu servidor de bando de dados.
GOSTEI 0
Zenior
23/03/2004
Atualizar o banco é atualizar a estrutura, acrescentar alguns campos em algumas tabelas, construir ínidces, checar os índices que já existem e se algum desses estiver com problemas, recria-los.
Tive um idéia, antes de verificar cada tabela, poderia tentar abrí-la em modo exclusivo. [b:b12badfd8e]Table.Exclusive = true;[/b:b12badfd8e] se der erro eh porque está aberta em algum canto.
Será que tem alguma função do proprio windows que me retorne em qual estação a referida tabela está aberta?
Obrigado a todos
Um abraço
Tive um idéia, antes de verificar cada tabela, poderia tentar abrí-la em modo exclusivo. [b:b12badfd8e]Table.Exclusive = true;[/b:b12badfd8e] se der erro eh porque está aberta em algum canto.
Será que tem alguma função do proprio windows que me retorne em qual estação a referida tabela está aberta?
Obrigado a todos
Um abraço
GOSTEI 0
Zenior
23/03/2004
Ao moçada,
por favor me ajudem.
por favor me ajudem.
GOSTEI 0
Zenior
23/03/2004
Fiz o Seguinte cóidigo e aparentemente funciona:
[b:7e1338c538] Pro negócio ficar bom mesmo, eu precisaria saber em qual estação da rede essa tabela está em uso.[/b:7e1338c538] Será que alguém poderia me ajudar nessa parte.
[b:7e1338c538]Obrigado a todos, akele abraço[/b:7e1338c538]
var i : integer; begin i:=0; while i = 0 do begin try Table1.Close; Table1.Exclusive := true; Table1.Open; i:=1; Except Table1.close; i:=0; ShowMessage(´A tabela ´+Table1.TableName+´ está em uso!!´); end; end; end;
[b:7e1338c538] Pro negócio ficar bom mesmo, eu precisaria saber em qual estação da rede essa tabela está em uso.[/b:7e1338c538] Será que alguém poderia me ajudar nessa parte.
[b:7e1338c538]Obrigado a todos, akele abraço[/b:7e1338c538]
GOSTEI 0
Zenior
23/03/2004
[b:812f3d2322] Pro negócio ficar bom mesmo, eu precisaria saber em qual estação da rede essa tabela está em uso.[/b:812f3d2322] Será que alguém poderia me ajudar nessa parte.
Essa rede é a ponto a ponto do windows.
Um abraço
GOSTEI 0