Fórum PROBLEMA COM SHELLEXECUTE #382873
05/08/2010
0
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
Curtir tópico
+ 0Posts
05/08/2010
Eriley Barbosa
Gostei + 0
05/08/2010
Rafael Ribeiro
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
05/08/2010
Eriley Barbosa
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
05/08/2010
Rafael Ribeiro
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
05/08/2010
Eriley Barbosa
Gostei + 0
05/08/2010
Emerson Nascimento
publique seu código original.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)