PROBLEMA COM SHELLEXECUTE

Delphi

05/08/2010

Olá Pessoal!

       Estou com um problema há três dias que não consigo resolver. Minha tabela possui uma coluna (Blob) onde armazeno pequenos arquivos de "pdf". Desta forma eu dou um "shellexecute" e ele abre o anexo. Até aqui perfeito! Entretanto, quando eu fecho o anexo (pdf) e volto pra tela do meu sistema,  todos os dados da minha grid somem. Alguma coisa acontece com o ponteiro que eu não consigo saber o que é? Já aconteceu isso com alguém?
      Por favor me ajudem!

Rafael
Rafael Ribeiro

Rafael Ribeiro

Curtidas 0

Respostas

Eriley Barbosa

Eriley Barbosa

05/08/2010

Onde está abrindo a tabela que preenche a grid, passe o cóigo que está utilizando para abrir os arquivos, pois, está acontecendo de sua tabela estar sendo fechada.   Atenciosamente   Eriley
GOSTEI 0
Rafael Ribeiro

Rafael Ribeiro

05/08/2010

ERILEY, BOM DIA!

          PARA INCLUSIVE NÃO PERDER O PONTEIRO, EU CLONEI O CLIENTDATASET E O CÓDIGO FICOU O SEGUINTE:

[CODE]

procedure TFrmAvisoProcesso.btn1Click(Sender: TObject);

var Retorno: Integer;

  Param: PChar;

  DefDir: PChar;

  CdsClone: TclientDataSet;
begin

CdsClone:= TclientDataSet.Create(nil);

try

    CdsClone.CloneCursor(DM.CDSAVISOPROC, false, false);

    // Executa alguma operação no clone

Nome_Arquivo := CdsClone.FieldByName('FILENAME').asString;
try


      //cria uma pasta temporária para abrir arquivo gravado na base de dados.

       ForceDirectories('C:\temp\');

       //salva e abre arquivo

       TBlobField(CdsClone.FieldByName('ANEXO')).SaveToFile(

         'C:\temp\' + Nome_Arquivo);

       //abre arquivo requisitado - usa função ShellExecute, da API do Windows (unit ShellAPI)

       Param:= nil;

       DefDir:= nil;

       //FrmAvisoProcesso.WindowState := wsMinimized;

       Retorno := ShellExecute(Handle,'open',

           PChar('C:\temp\' + Nome_Arquivo),

           '','',SW_SHOWNORMAL);

       if Retorno <= 32 then

        ShowMessage('ShellExecute: Erro ao abrir arquivo ' +

           'C:\temp\' + Nome_Arquivo);


except
    ShowMessage('Esta Idéia Não Possui Anexo!');
end;
finally
  CdsClone.Free
end;

end;

[CODE]

GRATO!!!
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

05/08/2010

Pois é no clone você ta dando Free: finally
  CdsClone.Free;   Ai este Dataset não está aberto mais.   Tem que ver se quando você faz isso:   CdsClone.CloneCursor(DM.CDSAVISOPROC, false, false);
Não ta fechando o DM.CDSAVISOPROC, se este dataset não estiver fazendo nenhuma pesquisa, bastaria você reabrilo novamente, aqui:   finally
  CdsClone.Free;   if not (DM.CDSAVISOPROC.Active) then     DM.CDSAVISOPROC.Open; 
end;
Mas o bom é que você pudesse coloca este código no onActivate do form: if not (DM.CDSAVISOPROC.Active) then     DM.CDSAVISOPROC.Open;   Atenciosamente   Eriley
GOSTEI 0
Rafael Ribeiro

Rafael Ribeiro

05/08/2010

ERILEY, BOM DIA!

          O CDSCLONE FOI MINHA ÚLTIMA TENTATIVA. MESMO SEM USÁ-LO, O PROBLEMA OCORRE MESMO SEM USAR O CLONE. CARAMBA JÁ ESTÁ ME DANDO DESESPERO.


GOSTEI 0
Eriley Barbosa

Eriley Barbosa

05/08/2010

Que tal tentar utilizar os BookMark, veja um exemplo no link abaixo:   https://www.devmedia.com.br/articles/post-3260-Dicas-BookMarks-no-Delphi.html   Atenciosamente   Eriley
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

05/08/2010

será que você não está desligando a comunicação entre o dataset e o dataware (disablecontrols) e esquecendo de religá-la?

publique seu código original.

GOSTEI 0
POSTAR