GARANTIR DESCONTO

Fórum PROBLEMA COM SHELLEXECUTE #382873

05/08/2010

0

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

Responder

Posts

05/08/2010

Eriley Barbosa

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
Responder

Gostei + 0

05/08/2010

Rafael Ribeiro

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!!!
Responder

Gostei + 0

05/08/2010

Eriley Barbosa

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
Responder

Gostei + 0

05/08/2010

Rafael Ribeiro

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.


Responder

Gostei + 0

05/08/2010

Eriley Barbosa

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
Responder

Gostei + 0

05/08/2010

Emerson Nascimento

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.

Responder

Gostei + 0

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

Aceitar