Jump to content
Fórum Script Brasil
  • 0

[resolvido] Salvar Atalho Num Banco E Abrir O Arquivo Correspondente A


Guest --Marcos --
 Share

Question

Guest --Marcos --

:ph34r: Caros, estou desenvolvendo um pequeno banco de dados, e queria fazer o sequinte: salvar no banco por título, descrição, atalho do arquivo numa pasta no HD, etc.. e então através de um pesquisa no banco de dados e com um simples toque num botão específico abrir o arquivo que seria gerado no programa Acrobat Reader (PDF) e MOffice (Word, Excel e PP). Isso seria que em vez de salvar todo o conteúdo, destes arquivos, queria apenas vincular seu atalho para após pesquisa abri-lo.

Agradeço desde de já a atenção e ajuda.

Link to comment
Share on other sites

17 answers to this question

Recommended Posts

  • 0
:ph34r: Caros, estou desenvolvendo um pequeno banco de dados, e queria fazer o sequinte: salvar no banco por título, descrição, atalho do arquivo numa pasta no HD, etc.. e então através de um pesquisa no banco de dados e com um simples toque num botão específico abrir o arquivo que seria gerado no programa Acrobat Reader (PDF) e MOffice (Word, Excel e PP). Isso seria que em vez de salvar todo o conteúdo, destes arquivos, queria apenas vincular seu atalho para após pesquisa abri-lo.
se entendi direito, você precisa:

- de algum modo cadastrar os atalhos. Os caminhos (path) do programas ou arquivos, podem ser obtidos manualmente (via componente Open Dialog) ou rastreando o disco;

- fazer um mecanismo de busca no seu banco de dados - tem vários posts sobre isto aqui no forum;

- executar o programa/arquivo. Pode ser usando WinExec - exemplo

Se era isso, veja se consegue dar um start...

Link to comment
Share on other sites

  • 0
Guest --Marcos --
:ph34r: Caros, estou desenvolvendo um pequeno banco de dados, e queria fazer o sequinte: salvar no banco por título, descrição, atalho do arquivo numa pasta no HD, etc.. e então através de um pesquisa no banco de dados e com um simples toque num botão específico abrir o arquivo que seria gerado no programa Acrobat Reader (PDF) e MOffice (Word, Excel e PP). Isso seria que em vez de salvar todo o conteúdo, destes arquivos, queria apenas vincular seu atalho para após pesquisa abri-lo.
se entendi direito, você precisa:

- de algum modo cadastrar os atalhos. Os caminhos (path) do programas ou arquivos, podem ser obtidos manualmente (via componente Open Dialog) ou rastreando o disco;

- fazer um mecanismo de busca no seu banco de dados - tem vários posts sobre isto aqui no forum;

- executar o programa/arquivo. Pode ser usando WinExec - exemplo

Se era isso, veja se consegue dar um start...

Caro Quote, Bom dia!

Tentei fazer o que sugeriu, mas como sou iniciante ainda, não saí do canto!!! Meu problema central neste momento é que não consigo salvar o atalho para o arquivo.

OpenDialog1.Execute;

DataModule1.Tbio.Active:= true;

DataModule1.Tbio.Edit;

DBEdit1.xxxxx.LoadFromFile(?)(OpenDialog1.Filename);

Como você vê acima, queria salvar o "atalho do arquivo" (Doc ou pdf) no DBedit1 e depois apenas com um toque num botão específico abrir o arquivo toda vez que necessita-se. Então em vez de salvar dos os dados dos arquivos no banco de dados, apenas salvaria o link e editaria um "título, código, descrição e outros" e após uma pesquisa simples eu poderia chegar mais fácil aos arquivo que realmente necessito!!!!

Por enquanto é este meu problema!

Queria agradece-lo pela atenção e ajuda.

Atenciosamente.

Marcos.

Link to comment
Share on other sites

  • 0
Guest --Marcos --

Caro Micheus,

Tentei fazer o que sugeriu, mas o problema é o seguinte:

Nos metodos indicados,

---------------------------------------------------------

WinExec(PChar('nome do arquivo.pdf'), SW_SHOWNORMAL);

ou

uses

ShellAPI;

ShellExecute(Handle, 'open', 'nome do arquivo.pdf', nil, nil, SW_SHOWNORMAL);

-----------------------

Pelo o que eu entendi neste caso é para um único arquivo (*.pdf e *.doc), mas o que eu quero é o seguinte

WinExec(PChar('Variável'), SW_SHOWNORMAL);

e esta variável seja o link que eu irei salvar do DBEdit1.text, como ainda irei fazer isso não sei.

Eu queria ao abrir o opendialog e foca-se o arquivo, como se fosse abrir (por exemplo), eu inclui-se este no DBEdit1.text (como é feito com o executar do windows) e este ficaria salvo o endereço no banco de dados e abriria com um click num botão específico, Então se incluissemos 300 links no banco de dados cada um com o seus títulos e descrições cada um deste link abriria um arquivo diferente numa pasta do HD.

É essa minha dúvida!!!

Agradecendo desde já a atenção e ajuda.

Marcos

[email protected]

Link to comment
Share on other sites

  • 0

Inicialmente, queria dizer que removi este seu ultimo post (igual ao que estou respondendo aqui) lá do tópico Abri Um Arquivo Pdf, porque já estamos tratando do assunto aqui. Voce não deve repetir tópicos/post.

continuando...

Tentei fazer o que sugeriu, mas como sou iniciante ainda, não saí do canto!!! Meu problema central neste momento é que não consigo salvar o atalho para o arquivo.

OpenDialog1.Execute;

DataModule1.Tbio.Active:= true;

DataModule1.Tbio.Edit;

DBEdit1.xxxxx.LoadFromFile(?)(OpenDialog1.Filename);

Como você vê acima, queria salvar o "atalho do arquivo" (Doc ou pdf) no DBedit1 e depois apenas com um toque num botão específico abrir o arquivo toda vez que necessita-se. Então em vez de salvar dos os dados dos arquivos no banco de dados, apenas salvaria o link e editaria um "título, código, descrição e outros" e após uma pesquisa simples eu poderia chegar mais fácil aos arquivo que realmente necessito!!!!

para inclusão de um novo item (linha ou registro) na sua tabela de atalhos você tem que:

1) estar com a tabela aberta (chamar o método Open ou utilizar a propriedade Active=True);

2) o novo registro é obtido através dos métodos Insert ou Append;

a abertura/fechamento da tabela não precisa ocorrer "o tempo todo", vai depender de como você estruturar suas telas.

então, supondo a tabela aberta num momento inicial:

DataModule1.Tbio.Active:= true;

supondo que você utilize um botão para incluir um novo registro, no OnClick do mesmo você colocaria:

DataModule1.Tbio.Append;

supondo que você utilize um botão para alteração de um registro já gravado, no OnClick do mesmo você colocaria:

supondo que você utilize um botão para incluir um novo registro, no OnClick do mesmo você colocaria:

DataModule1.Tbio.Edit;

supondo que você utilize um botão para acionar a caixa de seleção do arquivo, no OnClick do mesmo você colocaria:

...
  if OpenDialog1.Execute then
  begin
    DataModule1.TbioLINK.AsString := OpenDialog1.Filename;
  end;
se você tiver algum botão para gravar as informações, lá você colocará: DataModule1.Tbio.Post; se não tiver, deverá achar um momento em que irá gravar os dados Faltariam-me mais informações para dar mais esclarecimentos
Nos metodos indicados, --------------------------------------------------------- WinExec(PChar('nome do arquivo.pdf'), SW_SHOWNORMAL); ou uses ShellAPI; ShellExecute(Handle, 'open', 'nome do arquivo.pdf', nil, nil, SW_SHOWNORMAL); ----------------------- Pelo o que eu entendi neste caso é para um único arquivo (*.pdf e *.doc)
Negativo! Nos exemplos o nome dos arquivos estão fixos - é meramente ilustrativo.
(...), mas o que eu quero é o seguinte
WinExec(PChar('Variável'), SW_SHOWNORMAL);
e esta variável seja o link que eu irei salvar do DBEdit1.text, como ainda irei fazer isso não sei.
apenas ajustando os termos, senão vamos ter problema de comunicação: você vai salvar (gravar) no banco de dados. Ao DBEdit1.text você atribui um valor, que postiriormente, quando chamar o método Post do dataset (table ou query), será tranferido para o banco. Bom, para executar um atalho salvo, você terá que localizar o tal registro no banco e uma vez localizado você terá o conteúdo do atalho no respectivo campo. Vou exemplificar supondo que o nome do campo em que foi armazenado o atalho seja LINK:
var
  ProgLink :string;
begin
  if not DataModule1.TbioLINK.AsString <> '' then
  begin
    ProgLink := DataModule1.TbioLINK.AsString;
    WinExec(PChar(ProgLink), SW_SHOWNORMAL);
  end else
    ShowMessage('Atalho não foi definido');
end;

Veja se você avança um pouco mais.

Abraços

Link to comment
Share on other sites

  • 0
Guest --Marcos --

Caro Michel,

Eu escrevi assim o código:

procedure TPCadsArtigos.SpeedButton1Click(Sender: TObject);

begin

if OpenDialog1.Execute then

begin

DataModule1.Tartigos.AsString := OpenDialog1.filename; No banco o atalho é salvo no DataField 'Atalho' ou [10]'

{neste ponto em negrito deu problema e o programa não compilou}

Eu queria neste ponto aqui quando eu abro o OpenDialog1 e clico no arquivo 'PDF' ou 'DOC' numa pasta específica que fica dentro da pasta do programa e nesta pasta contém vários arquivos "PDFs' e 'DOCs" e então finalizo o OpenDialog1 este atalho exemplo: 'C:\Programa Teste\Banco\*.pdf' fosse inscrito (copiado) no DBedit1 que depois eu clicaria no botão salvar do DBNavigator1 e pronto, a primeira parte estaria pronta.

end;

Ao Executar o arquivo:

procedure TPcadsArtigos2.SpeedButton2Click(Sender: TObject);

var

ProgLink :string;

begin

if not DataModule1.Tbio.AsString <> '' then No banco o atalho é salvo no DataField 'Atalho' ou [10]'

Do mesmo jeito que anteriormente, quando tentei abrir o arquivo em PDF

que salvei manualmente no banco de dados, exemplo: 'C:\FILMES\DELPHI 4 - AVANÇADO - CORPORATIVO.pdf'

begin

ProgLink := DataModule1.Tbio.AsString;

WinExec(PChar(ProgLink), SW_SHOWNORMAL);

end else

ShowMessage('Atalho não foi definido');

end;

Muito obrigado Michel pela atenção.

Grande Abraço.

Link to comment
Share on other sites

  • 0
Caro Micheus,

Eu escrevi assim o código:

procedure TPCadsArtigos.SpeedButton1Click(Sender: TObject);

begin

if OpenDialog1.Execute then

begin

DataModule1.Tartigos.AsString := OpenDialog1.filename; No banco o atalho é salvo no DataField 'Atalho' ou [10]'

{neste ponto em negrito deu problema e o programa não compilou}

Eu queria neste ponto aqui quando eu abro o OpenDialog1 e clico no arquivo 'PDF' ou 'DOC' numa pasta específica que fica dentro da pasta do programa e nesta pasta contém vários arquivos "PDFs' e 'DOCs" e então finalizo o OpenDialog1 este atalho exemplo: 'C:\Programa Teste\Banco\*.pdf' fosse inscrito (copiado) no DBedit1 que depois eu clicaria no botão salvar do DBNavigator1 e pronto, a primeira parte estaria pronta.

end;

Ao Executar o arquivo:

procedure TPcadsArtigos2.SpeedButton2Click(Sender: TObject);

var

ProgLink :string;

begin

if not DataModule1.Tbio.AsString <> '' then No banco o atalho é salvo no DataField 'Atalho' ou [10]'

Do mesmo jeito que anteriormente, quando tentei abrir o arquivo em PDF

que salvei manualmente no banco de dados, exemplo: 'C:\FILMES\DELPHI 4 - AVANÇADO - CORPORATIVO.pdf'

begin

ProgLink := DataModule1.Tbio.AsString;

WinExec(PChar(ProgLink), SW_SHOWNORMAL);

end else

ShowMessage('Atalho não foi definido');

end;

Caso o usuário possa acionar os SpeedButtons em questão, acho que seria conveniente verificar se a tabela está ou não no modo Edição/Inserção, já que a atribuição de um valor ao campo resultará em erro caso a mesma não esteja nestas situações.

Assumi que o nome da tabela em questão é Tartigo, já que em uma procedure você colocou Tartigo e em outra Tbio.

procedure TPCadsArtigos.SpeedButton1Click(Sender: TObject);
begin
 // *** Observe que o nome do campo deveria ser TartigosAtalho 
 // (sempre que adicionado em design-time, será nome_dataset+nome_campo)
  if OpenDialog1.Execute then
  begin
   // *** verificando estado atual da tabela
    if not (DataModule1.Tartigos.State in [dsInsert, dsEdit]) then
      DataModule1.Tartigos.Edit;
    DataModule1.TartigosAtalho.AsString := OpenDialog1.filename;
  end;
end;
procedure TPcadsArtigos2.SpeedButton2Click(Sender: TObject);
var
  ProgLink :string;
begin
 // *** Observe que o nome do campo deveria ser TartigosAtalho 
 // (sempre que adicionado em design-time, será nome_dataset+nome_campo)
  if not DataModule1.TartigosAtalho.AsString <> '' then
  begin
    ProgLink := DataModule1.TartigosAtalho.AsString;
    WinExec(PChar(ProgLink), SW_SHOWNORMAL);
  end else
    ShowMessage('Atalho não foi definido');
end;

Link to comment
Share on other sites

  • 0
Guest --Marcos --

Caro Micheus,

A primeira parte com a sua ajuda e olhando o código fonte de outro programa similar está concluída, foi escrito assim:

O atalho salvo no DBedit1.text está prefeito.

procedure TPcadsArtigos.SpeedButton1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    Datamodule1.Tartigos.Active:= True;
    Datamodule1.Tartigos.Edit;
    DataModule1.Tartigos.FieldByName('Atalho').AsString := Opendialog1.filename;
    DataModule1.Tartigos.FieldByName('Atalho').AsString := DBEdit1.Text;
    Datamodule1.Tartigos.Post;
  end;
end;
Agora a segunda parte emperrou!
procedure TPcadsArtigos2.SpeedButton2Click(Sender: TObject);
var
ProgLink :string;
begin
  Datamodule1.Tartigos.Active:= True;
  if not (DBEdit5.Text <> '') then
  begin
     ProgLink := DBEdit1.Text;
O link que eu quero ativar (abri o arquivo) está no DBedit1.Text e então acho que a variável teria que está associada a ele(?). Ambas as maneiras não está dando certo, nem do jeito proposto por você, nem tão pouco como eu estou pensando. Vejo que {WinExec(PChar('nome do arquivo.pdf'), SW_SHOWNORMAL)}; o nome do arquivo.pdf está entre ' ', será que tem algum problema para abrir o arquivo ou será outro problema?
WinExec(PChar(ProgLink), SW_SHOWNORMAL);
       end else
     ShowMessage('Atalho não foi definido');
end;

Obrigado mais uma vez pela a atenção e ajuda!

Marcos

Edited by Micheus
Incluída tag's CODE para melhorar a visualização. Utilize a identação também ;)
Link to comment
Share on other sites

  • 0
...
    DataModule1.Tartigos.FieldByName('Atalho').AsString := Opendialog1.filename;
    DataModule1.Tartigos.FieldByName('Atalho').AsString := DBEdit1.Text;
...
Marcos, a segunda linha é redundância - retire-a.
Agora a segunda parte emperrou!
procedure TPcadsArtigos2.SpeedButton2Click(Sender: TObject);
var
ProgLink :string;
begin
  Datamodule1.Tartigos.Active:= True;
  if not (DBEdit5.Text <> '') then
  begin
    ProgLink := DBEdit1.Text;
esta prática pode até funcionar, mas não é o ideal. A melhor opção é sempre utilizar o Field do dataset. Se você adicionou os campos ao seu dataset TArtigos, você deve ter um componente TArtigosAtalho (do tipo TStringField) lá no seu DataModule1. É ele que você deveria utilizar (ficaria assim: if DataModule1.TArtigosAtalho.AsString <> '' then ...). Já pensou na encrenca que você vai arrumar quando estiver trabalhando com números formatados? Um campo destes, utilizando o método AsFloat do Field resultará em um valor numérico que pode ser diretamente manipulado (ex. ... := TabProdutoVlPreco.AsFloat *10), mas se você utiliza o componente TDBEdit, você teria que converter Text para um número antes da operação, sujeito a problemas pela presença de pontuação de milhar.
O link que eu quero ativar (abri o arquivo) está no DBedit1.Text e então acho que a variável teria que está associada a ele(?). Ambas as maneiras não está dando certo, nem do jeito proposto por você, nem tão pouco como eu estou pensando. Vejo que {WinExec(PChar('nome do arquivo.pdf'), SW_SHOWNORMAL)}; o nome do arquivo.pdf está entre ' ', será que tem algum problema para abrir o arquivo ou será outro problema?
...
    WinExec(PChar(ProgLink), SW_SHOWNORMAL);
  end else
    ShowMessage('Atalho não foi definido');
end;

não será pelo fato de você não estar atribuindo valor a ProgLink? Veja o teste que você está fazendo:
if not (DBEdit5.Text <> '') then

begin

ProgLink := DBEdit1.Text;

Será que este NOT não estaria sobrando?

Se DBEdit5.Text <> '' for verdadeiro (DBEdit5.Text tiver alguma coisa), você está negando ele, ou seja seu IF não é validado. Logo, ProgLink não recebe nada;

Já se DBEdit5.Text estivesse vazio, DBEdit5.Text <> '' seria falso e sua negação tornaria válido o IF, fazendo com que o ProgLink receba "algo".

O que é que tem em DBEdit5? Que campo está vinculado a ele? (mais uma razão para utilizar Fields - fica mais claro o código)

Abraços

Link to comment
Share on other sites

  • 0
Guest --Marcos --

Caro Micheus,

procedure TPcadsArtigos2.SpeedButton2Click(Sender: TObject);
var
ProgLink :string;
begin
  Datamodule1.Tartigos.Active:= True;
  if not DataModule1.TartigosAtalho.AsString [b]<>[/b] ' ' then   [i]Está emperrando neste ponto em negrito, com aquela tarja vermelha, com as seguintes frases:

[Error] PArtigos2.pas(180): Operator not applicable to this operand type
[Fatal Error] Fito_Microbio.dpr(33): Could not compile used unit 'PArtigos2.pas'[/i]

  begin
     ProgLink := DataModule1.TartigosAtalho.AsString;
     WinExec(PChar(ProgLink), SW_SHOWNORMAL);
     {WinExec(PChar([b]'nome do arquivo.pdf'[/b]), SW_SHOWNORMAL)};
  end else
     ShowMessage('Atalho não foi definido');
end;

Obrigado novamente!

Marcos

Edited by Micheus
Incluída tag's CODE para melhorar a visualização. Utilize a identação também ;)
Link to comment
Share on other sites

  • 0
Caro Micheus,

procedure TPcadsArtigos2.SpeedButton2Click(Sender: TObject);
var
ProgLink :string;
begin
  Datamodule1.Tartigos.Active:= True;
  if not DataModule1.TartigosAtalho.AsString [b]<>[/b] ' ' then   [i]Está emperrando neste ponto em negrito, com aquela tarja vermelha, com as seguintes frases:

[Error] PArtigos2.pas(180): Operator not applicable to this operand type
[Fatal Error] Fito_Microbio.dpr(33): Could not compile used unit 'PArtigos2.pas'[/i]

  begin
     ProgLink := DataModule1.TartigosAtalho.AsString;
     WinExec(PChar(ProgLink), SW_SHOWNORMAL);
     {WinExec(PChar([b]'nome do arquivo.pdf'[/b]), SW_SHOWNORMAL)};
  end else
     ShowMessage('Atalho não foi definido');
end;

Obrigado novamente!

Marcos

Altere para:

if not (DataModule1.TartigosAtalho.AsString <> '') then

você deve fazer a negação do resultado do teste => DataModule1.TartigosAtalho.AsString <> ''

e não a negação da string => not DataModule1.TartigosAtalho.AsString - isto não é possível mesmo.

bobeira minha não ter percebido antes.

outra coisa, o teste é com '' sem o espaço no meio das aspas, ok?! porque você está comparando o campo com uma string vazia.

Abraços

Link to comment
Share on other sites

  • 0
Guest --Marcos --

Micheus,

Anteriormente não tinha mostrado o ponto de parada, em negrito. Lembrando meu delphi é 6.0, se isso conta algo?

if not DataModule1.TartigosAtalho.AsString < {Aqui} > ' ' then

Obrigado.

Marcos.

Link to comment
Share on other sites

  • 0
Guest Visitante

Caro Micheus,

Não percebi antes as mudanças e então eu fiz agora, mas não carregou o arquivo PDF.

procedure TPcadsArtigos2.SpeedButton2Click(Sender: TObject);
var
ProgLink :string;
begin
  Datamodule1.Tartigos.Active:= True;
  if not (DataModule1.TartigosAtalho.AsString <> '') then
  begin
     ProgLink := DataModule1.TartigosAtalho.AsString;
     WinExec(PChar(ProgLink), SW_SHOWNORMAL);
     [i]{WinExec(PChar('nome do arquivo.pdf'), SW_SHOWNORMAL); }[/i]
  end else
     ShowMessage('Atalho não foi definido');
end;

O seguinte link que está no banco de dados Datamodule1.Tartigosatalho - (BDEdit5.text) num Form1 que salvou e Datamodule1.Tartigosatalho - (DBedit1.text) no Form2 (carrega o arquivo .PDF).

C:\Documents and Settings\Marcos\Desktop\C24.pdf

Agradeço mais uma vez.

Marcos.

Edited by Micheus
Adicionado o delimitador de código [code] [/code]. Lembre-se de utilizá-lo para melhor visualização
Link to comment
Share on other sites

  • 0
Guest --Marcos --

Caro Micheus,

Encontrei esta dica na internet (itálico), só que não entendo nada do que está escrito e não sei se serve para meu caso. O que você acha, pode ser uma alternativa e dá alguma idéia para resolver meu problema?

Executar um programa do Windows

procedure ExecutePrograma(Nome, Parametros: String);

Var

Comando: Array[0..1024] of Char;

Parms: Array[0..1024] of Char;

begin

StrPCopy (Comando, Nome);

StrPCopy (Parms, Parametros);

ShellExecute (0, Nil, Comando, Parms, Nil, SW_ShowMaximized);

end;

Para rodar:

ExecutePrograma('WinWord.Exe, '');

ou para rodar um documento ou arquivo:

ExecutePrograma ('C:\MSOffice\Excel\Excel.Exe', 'Contas.Xls');

Agradeço mais uma vez.

Marcos.

Link to comment
Share on other sites

  • 0
Encontrei esta dica na internet (itálico), só que não entendo nada do que está escrito e não sei se serve para meu caso. O que você acha, pode ser uma alternativa e dá alguma idéia para resolver meu problema?
é apenas uma variação do que se tentou fazer. O relevante é a utilização de ShellExecute ao invés de WinExec.

Vendo o caminho no atalho (seu exemplo), lembro de que certa oportunidade o procedimento não funcionava com WinExec e cheguei a conclusão (fazendo testes) de que este só funcionar com nomes curtos (ex. ao invés de C:\Arquivos de programas\Mozilla Firefox\firefox.exe, teria que usar C:\Arquiv~1\Mozill~1\firefox.exe). Então, utilizando ShellExecute este "problema" não ocorre, ele usa os nomes longos.

Vamos tirar a dúvida. Altere o seu código para:

procedure TPcadsArtigos2.SpeedButton2Click(Sender: TObject);
var
  ProgLink :string;
begin
  Datamodule1.Tartigos.Active:= True;
  if not (DataModule1.TartigosAtalho.AsString <> '') then
  begin
     ProgLink := DataModule1.TartigosAtalho.AsString;
     ShellExecute(0, nil, ProgLink, nil, nil, SW_SHOWNORMAL);
{     WinExec(PChar(ProgLink), SW_SHOWNORMAL);  }
  end else
     ShowMessage('Atalho não foi definido');
end;
se houver algum erro de compilação com relação ao tipo da variável ProgLink, então faça um type-cast da mesma: ShellExecute (0, nil, PChar(ProgLink), nil, nil, SW_SHOWNORMAL); se não for permitido (não sei se no Delphi 6, string e Pchar já eram equivalentes), então tem que utilizar a abordagem do exemplo que você encontrou na net:
procedure TPcadsArtigos2.SpeedButton2Click(Sender: TObject);
var
  ProgLink :Array[0..1024] of Char;
begin
  Datamodule1.Tartigos.Active:= True;
  if not (DataModule1.TartigosAtalho.AsString <> '') then
  begin
     StrPCopy(ProgLink, DataModule1.TartigosAtalho.AsString);
     ShellExecute (0, nil, ProgLink, nil, nil, SW_SHOWNORMAL);
{     WinExec(PChar(ProgLink), SW_SHOWNORMAL);  }
  end else
     ShowMessage('Atalho não foi definido');
end;

Abraços

Link to comment
Share on other sites

  • 0
Guest --Marcos --

Caríssimo Micheus,

Tentei as três maneiras e não houve resultado.

procedure TPcadsArtigos2.SpeedButton2Click(Sender: TObject);

var

ProgLink :string;

begin

Datamodule1.Tartigos.Active:= True;

if not (DataModule1.TartigosAtalho.AsString <> '') then

begin

ProgLink := DataModule1.TartigosAtalho.AsString;

ShellExecute Parou aqui(0, nil, ProgLink, nil, nil, SW_SHOWNORMAL);

{ WinExec(PChar(ProgLink), SW_SHOWNORMAL); }

end else

ShowMessage('Atalho não foi definido');

end;

Será que o Delphi 6 está limitado para alguns comandos (componentes) escritos aqui?

procedure TPcadsArtigos2.SpeedButton2Click(Sender: TObject);

var

ProgLink :Array[0..1024] of Char;

begin

Datamodule1.Tartigos.Active:= True;

if not (DataModule1.TartigosAtalho.AsString <> '') then

begin

StrPCopy(ProgLink, DataModule1.TartigosAtalho.AsString);

ShellExecute Parou aqui também(0, nil, ProgLink, nil, nil, SW_SHOWNORMAL);

{ WinExec(PChar(ProgLink), SW_SHOWNORMAL); }

end else

ShowMessage('Atalho não foi definido');

end;

Link to comment
Share on other sites

  • 0

Marcos, acho que agora vai...

Seguinte: quando "parou aqui", você deve ter observado que na janela de mensagem da compilação deve ter aparecido algo como "... : Undeclared identifier 'ShellExecute'."

Isto ocorreu porque faltou declarar a unit em que a função está implementada: ShellAPI

Adicione ela na cláusula uses do seu form.

Outra coisa, eu fiz uma correção erradamente no post#11:

no lugar de:

if not (DataModule1.TartigosAtalho.AsString <> '') then

você deverá utilizar:

if not (DataModule1.TartigosAtalho.AsString = '') then

ou

if DataModule1.TartigosAtalho.AsString <> '' then

já que queremos que o teste no if passe se houver um atalho digitado. Desculpe minha desatenção.

Apenas mais um comentário...

quando você utiliza o comando:

Datamodule1.Tartigos.Active:= True;

você estará abrindo a tabela e a mesma será posicionada no 1º registro. Então, tenha em mente que esta sua rotina SEMPRE vai executar o atalho definido no 1º registro da tabela.

Isto até não é problema, se por acaso você está utilizando algum tipo de filtro sobre esta tabela a partir de outra.

Abraços

Link to comment
Share on other sites

  • 0
Guest saraivas2

Micheus, boa noite!

Queria agradece-lo por tudo e também compartilhar com todo o pessoal o código fonte de como salvar os links e abrir os arquivos referente aos mesmos.

Salvar o link no Banco de dados

procedure TPcadsArtigos.SpeedButton1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    Datamodule1.Tartigos.Active:= True;
    Datamodule1.Tartigos.Edit;
    DataModule1.Tartigos.FieldByName('Atalho').AsString := Opendialog1.filename;
  {DataModule1.Tartigos.FieldByName('Atalho').AsString := DBEdit5.Text;}
    Datamodule1.Tartigos.Post;
  end;
end;
Abrir o arquivo pdf correspodente do link!
procedure TPcadsArtigos2.SpeedButton2Click(Sender: TObject);
  var
Arquivo: string;
begin
  if not (DataModule1.TartigosAtalho.AsString = '') then
  begin
    Arquivo := DataModule1.Tartigos.FieldByName('Atalho').AsString;
    ShellExecute(0, nil, PChar('AcroRd32.exe'), PChar(Arquivo), nil, SW_SHOWNORMAL);
  end else
    ShowMessage('Atalho não foi definido');
end;

Valeu mesmo, não tenho nem palavras suficientes para te agradecer!

Grande abraço!

Edited by Micheus
Incluída tag's CODE para melhorar a visualização. Utilize a identação também ;)
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.2k
    • Total Posts
      647.4k
×
×
  • Create New...