Na paleta Server do Delphi encontramos diversos componentes que per- mitem uma conexão COM (Components Object Model) com a família Office. O padrão COM, desenvolvido pela Microsoft, oferece mais recur- sos ao programador que o uso da OLE Automation. Com estes compo- nentes o programador pode automatizar tarefas utilizando recursos de outros programas.
É possível criar um relatório no Word e depois realizar alterações atra- vés de um programa feito em Delphi. Facilitando a vida de usuários que necessitam editar estes relatórios, criando uma personalização a partir de um documento padrão.
Como exercício inicial, iremos criar um documento no Word com o texto escrito no componente Memo do projeto Bloco de notas.
Abra o projeto Bloco de Notas construído anteriormente. Adicione um botão e os componentes WordApplication e WordDocument da paleta Server.
Altere o nome dos componentes:
Button1 btnWord
WordApplication WA WordDocument WD
Digite o seguinte código para o botão de comando.
procedure TfrmBlocoNotas.btnWordClick(Sender: TObject); var
NomeArquivo: OLEVariant;
begin
WA.Connect; //Inicializa o Word
WD.Activate; //Exibe o aplicativo Word WD.NewInstance; //Cria um novo documento
WD.Content.InsertAfter(memTexto.Lines.Text);//Insere texto
NomeArquivo:= ‘C:\Temp\Bloco.doc’; //String em OLEVariant
WA.ActiveDocument.SaveAs(NomeArquivo,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam); WD.Close; //Fecha documento
end;
Inicialmente é dada a abertura do Word e depois cria-se um novo docu- mento. A procedure InsertAfter adiciona um texto o final do documento, mas poderia ser InsertBefore para texto antes.
Na lista de code completion é possível observar todos os procedimentos e funções associadas à cada um desses objetos. Na ajuda do WordBasic é possível encontrar detalhes sobre a operação de cada procdimento. A partir do Word abra o Editor do Visual Basic (Ferramentas >> Macro) e na sua ajuda procure por SaveAs, escolhendo a opção Método SaveAs. Note que este método requer a definição de onze parâmetros para sal- var o arquivo. Mas para salvar o texto digitado no programa, é necessá- rio apenas informar o nome do arquivo a ser salvo, mantendo os demais parâmetros vazios. Isto faz o Word manter os valores padrão para cada opção de salvamento.
Execute o programa. Digite algum texto no Memo e depois dê um clique no botão Word, notando que o texto será escrito no documento, salvo e depois fechado.
no formulário Vendas que ao ser clicado, abrirá um documento modelo, alterará algumas palavras, baseadas no pedido corrente, salvando o documento com outro nome.
Abra o programa Banco de dados criado anteriormente, incluindo um componente WordApplication e um botão no formulário frmVendas.
No Word digite um documento semelhante ao mostrado na figura a se- guir, mantendo as palavras chave que serão substituídas pelo programa: DATAHOJE, NUMEROPEDIDO, NOMECLIENTE,PRODUTONOME, QUANTIDADEPRODUTO e VALORTOTAL. Salve este documento com o nome de Recibo.doc.
A maneira mais fácil de saber quais métodos implementar no programa em Delphi para efetuar as mudanças necessárias no texto, é criar uma macro no Word e depois editar e copiar no Code explorer traduzindo-a para a linguagem Object Pascal, pois ela estará em WordBasic.
Grave uma macro substituindo a palavra DATAHOJE por qualquer outra, pois o que nós desejamos é apenas a sintaxe utilizada pelo Word. A listagem a seguir mostra uma macro que substitui o texto DATAHOJE por “24 de Janeiro” com a opção de substituir todas.
Sub Macro1() ‘
‘Macro1 Macro
‘Macro gravada 24/07/00 por Jair ‘ Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = ”DATAHOJE” .Replacement.Text = ”24 de Janeiro” .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace=wdReplaceAll End Sub
Na unidade do formulário frmVendas, acrescente um procedimento cha- mado Substituir que terá por função substituir cada palavra do documen- to. Este procedimento receberá dois parâmetro que são o texto a ser substituído e o substituto.
Na implementação do procedimento Substituir, cole a macro gravada no Word.
procedure btnReciboClick(Sender: TObject);
procedure Substituir(Texto, TextoSub: String); private
{ Private declarations }
implementation
procedure TfrmVendas.Substituir(Texto, TextoSub: String);
{Texto contém a palavra que será substituída e TextoSub a substituta}
var
Repor: OLEVariant; //Tipo de variável aceita nos métodos Word
begin
Repor:= wdReplaceAll; //Constante definida em Word97.pas with WA.Selection.Find do begin Text := Texto; Replacement.Text := TextoSub; Forward := True;
Wrap := wdFindContinue; //Constante definida em Word97.pas
Format := False;
MatchCase := True; // = True para não ser tudo maiúsculo MatchWholeWord := False; MatchWildcards := False; MatchSoundsLike := False; MatchAllWordForms := False; end; WA.Selection.Find.Execute (EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam,Repor); end;
O evento OnClick do botão, abre o arquivo Recibo.doc, limpa as formatações de procura, chama o procedimento Substituir para cada campo do documento, atribuindo a eles os valores do registro corrente nas tabelas, e por último salva com outro nome e fecha o documento.
procedure TfrmVendas.btnReciboClick(Sender: TObject); var NomeArquivo: OLEVariant; begin NomeArquivo:=’C:\Temp\Recibo.doc’; WA.Documents.Open(NomeArquivo,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam); WA.Selection.Find.ClearFormatting; WA.Selection.Find.Replacement.ClearFormatting; Substituir (‘DATAHOJE’, FormatDateTime(‘dd” de “mmmm” de “yyyy’,Date)); Substituir (‘NUMEROPEDIDO’,tblVendasNumero.Value); Substituir (‘NOMECLIENTE’,tblClientesNome.Value); Substituir (‘PRODUTONOME’,tblVendasProduto.Value); Substituir (‘QUANTIDADEPRODUTO’,tblVendasQuantidade.AsString); Substituir (‘VALORTOTAL’,tblVendasValor.AsString); NomeArquivo:=’C:\Temp\Recibo’ + tblVendasNumero.Value + ‘.doc’; WA.ActiveDocument.SaveAs (NomeArquivo,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam); WA.ActiveDocument.Close (EmptyParam,EmptyParam,EmptyParam); end;
Execute o programa e no formulário frmVendas, clique no botão Recibo para ver o Word abrir o documento, alterar o texto, salvar e fechar com outro nome.
DELPHI 6 E SQL
No início dos anos 70, foi criado pelo departamento de pesquisa da IBM, uma nova forma de se comunicar com os Bancos de Dados Relacionais, denominada SYSTEM R. Era o iníco do SQL (Structured Query Language). A ANSI (American National Standard) padronizou o SQL em 1986, esta- belecendo-se então uma nova linguagem padrão de Banco de Dados. Uma consulta em SQL nada mais é do que uma pergunta que um deter- minado aplicativo faz a um Banco de Dados. Essas perguntas retornam um conjunto de registros que satisfazem os critérios especificados na pergunta, contendo informações dos campos das tabelas.
Vamos agora aprender um pouco mais sobre a sintaxe do SQL e em se- guida, desenvolveremos um aplicativo para sua demonstração prática.