Fórum Atualização automática Exe Banco de dados #221766

23/03/2004

0

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


Zenior

Zenior

Responder

Posts

23/03/2004

Marconi

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


Responder

Gostei + 0

23/03/2004

Geno

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.


Responder

Gostei + 0

23/03/2004

Zenior

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


Responder

Gostei + 0

24/03/2004

Zenior

Ao moçada,

por favor me ajudem.


Responder

Gostei + 0

24/03/2004

Zenior

Fiz o Seguinte cóidigo e aparentemente funciona:

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]


Responder

Gostei + 0

24/03/2004

Zenior

[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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar