Mostrar um aviso se o arquvo ja estiver em uso?

26/05/2008

1

Como faço para mostrar um aviso para o usuario quando um arquivo ja esta aberto?

Explicando: Tenho um codigo que gera um PDF, ai carrego o arquivo no Adobe. Bom até ai blz, mais vamos supor que eu tente abrir o mesmo arquivo outra vez gerando o codigo no Adobe se este ter sido fechado, me mostra o erro de ´Access violatiom at address ....´

Então o que eu preciso é saber se tem como eu colocar um aviso no meu sistema que aquele PDF ja esta em uso.

O código é este
{:Gera o arquivo PDF para ser anexado}
          n_Pedido := qr_PedidoSelecionadonum_pedido.AsString;
          wNomarq  := ´PD´+FormatDateTime(n_pedido+´.yymmdd´, now);
          ppReport1.DeviceType := ´PDFFile´;
          ppReport1.SaveAsTemplate := True;
          ppReport1.SavePrinterSetup := True;
          ppReport1.TextFileName := ´c:\pedidos\´+wNomarq+´.PDF´; //Joga o pdf criado para a pasta aonde esta o programa lá no cliente.

{:Mostrar o aviso aqui antes de executar o PrintReport}

          ppReport1.PrintReport;



Responder

Posts

28/05/2008

Marcosrocha

Coloca num [b:5b63f4b740]try[/b:5b63f4b740] com [b:5b63f4b740]except[/b:5b63f4b740]. Caso haja exceção, o arquivo está sendo utilizado.


Responder
Coloca num [b:c76b9bf5e5]try[/b:c76b9bf5e5] com [b:c76b9bf5e5]except[/b:c76b9bf5e5]. Caso haja exceção, o arquivo está sendo utilizado.


Obrigado amigo, mais não consegui

Olhe

try
            ppReport1.TextFileName := ´c:\pedidos\´+wNomarq+´.PDF´; //Joga o pdf criado para a pasta aonde esta o programa lá no cliente.
            ppReport1.PrintReport;
          except
           {Todo -cModulo EnviaPed -oAdriano:Não funcionou, queria mostrar uma mensagem se o arquivo ja estivesse em uso no adobe}
           if FileOpen(Caminho+wNomarq+´.PDF´,fmOpenReadWrite) > 0 then
           else
             raise Exception.Create(´Arquivo está aberto. Feche o Adobe para gravar o pedido´);
            Abort;
          end;



Responder

29/05/2008

Marcosrocha

Na verdade eu tinha em mente algo do tipo:
try
  ppReport1.TextFileName := ´c:\pedidos\´+wNomarq+´.PDF´; //Joga o pdf criado para a pasta aonde esta o programa lá no cliente.
  ppReport1.PrintReport;
except
  {Todo -cModulo EnviaPed -oAdriano:Não funcionou, queria mostrar uma mensagem se o arquivo ja estivesse em uso no adobe}
  on E: Exception do
  begin
    if Pos(´CANNOT OPEN FILE´, E.Message) > 0 then
      raise Exception.Create(´Arquivo está aberto. Feche o Adobe para gravar o pedido´)
    else
      raise E;
  end;
end;
E ainda que eu nem uso ´raise exception´ no except dos meus try eu uso [b:57e6239d04]MessageDlg(´Arquivo está aberto. Feche o Adobe para gravar o pedido´, mtError, [mbOK],0)[/b:57e6239d04].


Responder
Na verdade eu tinha em mente algo do tipo:
try
  ppReport1.TextFileName := ´c:\pedidos\´+wNomarq+´.PDF´; //Joga o pdf criado para a pasta aonde esta o programa lá no cliente.
  ppReport1.PrintReport;
except
  {Todo -cModulo EnviaPed -oAdriano:Não funcionou, queria mostrar uma mensagem se o arquivo ja estivesse em uso no adobe}
  on E: Exception do
  begin
    if Pos(´CANNOT OPEN FILE´, E.Message) > 0 then
      raise Exception.Create(´Arquivo está aberto. Feche o Adobe para gravar o pedido´)
    else
      raise E;
  end;
end;
E ainda que eu nem uso ´raise exception´ no except dos meus try eu uso [b:6aeed52f6c]MessageDlg(´Arquivo está aberto. Feche o Adobe para gravar o pedido´, mtError, [mbOK],0)[/b:6aeed52f6c].
Obrigado pela ajuda, mais não deu certo, aparece o erro de Access violation caso o adobe esteja aberto com o mesmo arquivo em uso.


Responder

29/05/2008

Marcosrocha

Tente modificar o código e adaptá-lo para a sua necessidade, veja debugando com F8 se o texto em E.Message contém alguma palavra que você possa usar como referência para saber se o arquivo está sendo usado.


Responder
Não passa da linha em vermelho
try {:Gera o arquivo PBD para ser anexado} n_Pedido := qr_PedidoSelecionadonum_pedido.AsString; wNomarq := ´PD´+FormatDateTime(n_pedido+´.yymmdd´, now); ppReport1.DeviceType := ´PDFFile´; ppReport1.SaveAsTemplate := True; ppReport1.SavePrinterSetup := True; ppReport1.TextFileName := ´c:\pedidos\´+wNomarq+´.PDF´; //Joga o pdf criado para a pasta aonde esta o programa lá no cliente. {:Grava no RBuilder} [color=red:67673997e8]ppReport1.PrintReport;[/color:67673997e8] except {Todo -cModulo EnviaPed -oAdriano:Não funcionou, queria mostrar uma mensagem se o arquivo ja estivesse em uso no adobe} on E: Exception do begin if Pos(´cannot open file´, E.Message) > 0 then raise Exception.Create(´Arquivo está aberto. Feche o Adobe para gravar o pedido´) else raise E; end; end;



Responder