o Caminho Das Pedras - Visual Foxpro - Nilton Paulino

download o Caminho Das Pedras - Visual Foxpro - Nilton Paulino

of 103

Transcript of o Caminho Das Pedras - Visual Foxpro - Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 1 de 103 O CAMINHO DAS PEDRAS Como desenvolvedor vindo de linguagens no visuais como Clipper e FoxPro, tive um certo trabalho pra me adaptar com Visual FoxPro. Primeiro pela infinidade de coisas que so abertas na tela pra se clicar e segundo porque existem muitos conceitos novos. Pretendo atravs deste pequeno manual apresentar o caminho mais rpido para se desenvolver aplicaes em Visual FoxPro, sem que ter apresentar todos os conceitos da linguagem. Ns que viemos de dialetos xBase e principalmente de linguagens para ambiente DOS temos um vasto vocabulrio de termos para elementos de nossas aplicaes que provavelmente mudaro de nomes no ambiente Windows. Alguns desses vocbulos: Tabela 1 Linguagem no Visual Tela Tela de Dados Lib Get Say Linguagem Visual Janela Formulrio de Dados Biblioteca de classes Textbox Label

NO PRECISO CONHECER TUDO PARA COMEAR Ao contrrio do que muitos acham, no necessrio conhecer tudo de VFP para comear a desenvolver. Note que eu disse comear. medida que se aprende mais, mais se tm necessidade de aprender. Isso o que o mximo! Em outras palavras quero dizer que necessrio aprender sempre. Para comearmos a desenvolver aplicaes de baixa complexidade no precisamos conhecer muita coisa. Vejamos algumas das que so mais necessrias. O que precisamos conhecer? Project Manager Database Designer Form Designer Menu Designer Report Designer Program Editor

O Project Manager Esta a ferramenta de gerenciamento de projetos do Visual FoxPro. bastante simples de utilizar e de uma utilidade incrvel. Atravs dele que faremos a compilao de nosso projeto final, gerando nossas APPs (Aplicaes) e executveis. Vejamos sua aparncia:

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 2 de 103

Figura 1 - Project Manager Como de se notar na figura do Project Manager acima, h seis abas dividindo os arquivos do projeto por categoria, sendo elas: All exibe todo o contedo do projeto. Data exibe apenas o que est relacionado a banco de dados Documents exibe os arquivos de formulrios (telas), relatrios (reports) e etiquetas (labels). Classes exibe as bibliotecas de classes (vcx) includas no projeto assim como as classes nelas contidas. Code exibe todos os programs (prgs), bibliotecas API e aplicaes (apps). Other exibe os demais tipos de arquivos que possam estar inclusos no projeto, como imagens, arquivos texto, menus, etc. O gerenciador de projetos composto ainda dos seguintes botes: New... serve para criar um novo componente e adicion-lo automaticamente ao projeto. O novo componente depender da categoria selecionada. Se voc estiver sobre Databases, ir criar um novo banco de dados ao clicar em New... e assim por diante. Add... serve para adicionar um componente j existente. Para adicionar um banco de dados j pronto, bastaria clicar sobre Database e depois em Add... escolhendo ento o banco de dados a ser adicionado ao projeto. Modify serve para modificar o componente selecionado. Ao clicar sobre o componente e depois em Modify, o editor apropriado ser aberto de acordo com o tipo de componente.Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 3 de 103 Open serve para abrir um banco de dados. Run serve para executar o componente selecionado. Os componentes que podem ser executados so os forms, labels, reports, prgs, menus. Remove... serve para remover um componente do projeto. Build... serve para compilar o projeto, permitindo-os criar apps, dlls e exes. Preview exibe um relatrio ou etiqueta no modo de visualizao para impresso. J mostrei algumas informaes sobre o gerenciador de projetos mas ainda nem mostrei como abri-lo. Pois bem, abri-lo tarefa bastante simples. Quando se trata de criar um novo projeto, voc pode ir no menu File e escolher New... a primeira opo Project. Ou ainda pode a partir da Janela de Comandos (Command Window) digitar: CREATE PROJECT nomedoprojeto Onde nomedoprojeto o nome que voc dar ao seu projeto. importante saber que o nome dado ao projeto ser o nome do executvel da aplicao, por isso, escolha bem o nome do seu projeto. Ainda sobre o Gerenciador de projetos, podemos adicionar que h um menu especfico para o mesmo, conforme mostra a prxima figura.

Figura 2 - Menu ProjectFox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 4 de 103 O menu Project possui as aes dos botes contidos no Project Manager e ainda algumas outras importantes aes como Project Info, utilizada para visualizar algumas outras informaes sobre o projeto. A opo Clean Up Project uma espcie de reindexador e compactador do projeto. medida que vamos adicionando e removendo itens do projeto bom sempre que executemos o Clean Up Project para reduzir o tamanho do mesmo. A Database Designer Usurios e desenvolvedores vindos de outras linguagens podem j ter utilizado alguma ferramenta para auxiliar na criao das tabelas de banco de dados. Na poca do Clipper, o DBU era um excelente aliado do desenvolvedor. Na era dBase, tambm j existia meio do usurio criar suas tabelas. Desde os tempos mais remotos o FoxPlus, FoxPro Dos e Windows tambm j permitia a criao de tabelas de forma interativa, facilitando bastante a vida do usurio. No Visual FoxPro no diferente. H uma ferramenta chamada Database Designer a qual utilizamos para a criao de forma visual e interativa dos componentes de um banco de dados. A principal diferena conceitual que na verso Visual, o Banco de dados formado por um Container e diversas tabelas. O DBC ou Database Container responsvel por armazenar informaes sobre as tabelas, ndices, stored procedures (procedimentos armazenados), triggers (disparadores), conexes e views. Atravs da Database Designer podemos gerenciar todas as atividades relacionadas a um banco de dados do Visual FoxPro. Para acessar a Database Designer, voc pode simplesmente a partir da aba Data do gerenciador de projetos clicar em Database ou no nome do banco de dados existente (caso exista um) e ento clicar em New..., ou em Modify (caso exista um banco de dados). No nosso caso como o banco ainda no existe, vamos criar um novo, clicando em New... Uma nova janela ser apresentada. Escolha New Database.

Figura 3 - New Database Agora informe o nome do banco de dados a ser criado. Caso queira coloc-lo dentro de uma pasta separada, fique vontade.Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 5 de 103

Figura 4 - Informando o nome do banco de dados. Aps clicar sobre o boto Save, o banco foi criado vazio e a janela da Database Designer ir aparecer para que voc adicione novas tabelas ao banco:

Figura 5 - Database Designer com um banco novo. Observe que alm da janela da Database Designer veio junto uma barra de ferramentas de mesmo nome. A partir dessa barra de ferramentas podemos realizar as seguintes operaes: New Table criar uma nova tabela. Add Table adicionar uma tabela j existente.Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 6 de 103 Remove Table remover uma tabela. New Remote View criar uma nova view (visualizao) remota. New Local View criar uma nova view local. Modify Table modificar a estrutura de uma tabela. Browse Table visualizar os dados da tabela selecionada. Edit Stored Procedures criar/modificar procedimentos armazenados no banco de dados. Connections criar/alterar conexes com bancos de dados. J que estamos falando em banco de dados, vamos logo definir aqui o que vamos desenvolver para aprendizado. Pensei num aplicativo simples, porm com um certo nvel de complexidade. Um Contas a Pagar e Contas a Receber seria um bom comeo. Estrutura bsica para o banco de dados do aplicativo Tabela de Fornecedores Tabela de Clientes Tabela de Contas a Pagar Tabela de Contas a Receber Tabela de Usurios

Passemos agora a definir a estrutura de cada uma dessas tabelas formando assim nosso banco de dados. A estrutura das tabelas a seguinte: Tabela 2 Tabela: Clientes Nome do Campo Id_cliente Nome_cliente Endereo Numero Bairro Cep Cidade Estado Ddd Telefone Contato Tabela 3 Tabela: Fornecedores Nome do Campo

Tipo Character Character Character Character Character Character Character Character Character Character Character

Tamanho 6 40 40 5 20 8 20 2 2 8 20

Tipo

TamanhoFox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 7 de 103 Id_fornecedor Nome_fornecedor Endereo Numero Bairro Cep Cidade Estado Ddd Telefone Contato Tabela 4 Tabela: ContasReceber Nome do Campo Id_ContaReceber ID_Cliente TipoDocto NumeroDocto DataVencimento Valor Quitado DataPagto ValorPagto Cheque_banco Cheque_agencia Cheque_numconta Cheque_numero Cheque_titular DataCadastro ID_usuario Tabela 5 Tabela: ContasPagar Nome do Campo Id_ContaPagar ID_Fornecedor TipoDocto NumeroDocto DataVencimento Valor Quitado DataPagto ValorPagto DataCadastro ID_usuario Character Character Character Character Character Character Character Character Character Character Character 6 40 40 5 20 8 20 2 2 8 20

Tipo Character Character Character Character Date Numeric Logic Date Numeric Character Character Character Character Character Date Character

Tamanho 6 6 10 8 8 7,2 1 8 7,2 3 7 10 6 40 8 3

Tipo Character Character Character Character Date Numeric Logic Date Numeric Date Character

Tamanho 6 6 10 8 8 7,2 1 8 7,2 8 3Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 8 de 103 Tabela 6 Tabela: Usurios Nome do Campo Id_usuario NomeUsuario SenhaUsuario

Tipo Character Character Character

Tamanho 3 25 8

- Representa um ndice de chave primria - representa um ndice regular Uma vez que j temos a descrio das tabelas e seus campos, agora vamos colocar a mo na massa... ops!, na raposa. Como voc j est com o banco de dados aberto, clique sobre o boto New Table. Aparecer o seguinte dilogo:

Figura 6 - Dilogo New Table Clique sobre o boto New Table. Aparecer ento o dilogo Create para que voc informe o nome da tabela a ser criada.

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 9 de 103

Figura 7 - Dilogo Create Ao clicar em Save, um novo dilogo aparecer onde voc definir o contedo da tabela. Agora s informar as informaes de cada campo.

Figura 8 - Dilogo Table Designer, definindo a estrutura da tabela.Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 10 de 103 Observe na figura acima as informaes de cada campo. Na lista da esquerda esto os campos da tabela. No painel da direita colocamos informaes adicionais para definirmos propriedades e comportamentos em particular de cada campo. Note na figura abaixo os dois destaques:

Figura 9 - ndices e valores nulos Na figura acima temos dois destaques. O primeiro, na coluna Index indica que o campo ser um ndice. O segundo, na coluna NULL indica que o campo poder receber um valor vazio. Como voc observou no painel da direita, exibido na figura 8, temos algumas propriedades relacionadas forma como os dados sero exibidos na tela ou em relatrios. Veja a figura 10:

Figura 10 Propriedades de exibio do campo O significado de cada um desses campos : Format define o formato da apresentao dos dados. Input mask define a mscara de entrada para o campo. Caption define o ttulo (descrio) para o campo. Esta a informao que aparecer no cabealho das grids, browses, labels, relatrios, etiquetas, etc. Definir este valor neste ponto far com que tenhamos muito menos trabalho na hora de formatar nossos formulrios e relatrios. O painel Field Validation da figura 8, apesar de parecer interessante no ter muita utilidade quando estivermos criando nossas aplicaes. Na maioria das vezes esse tipo de validao estar em nossos formulrios e no diretamente no banco de dados. O painel Map field type do class permite que faamos um mapeamento para o tipo de controle que ser usado para a entrada dos dados, por exemplo, Combo, Checkbox, Textbox, etc. Na maioria das vezes no faremos esse mapeamento diretamente no banco de dados. TIPOS DE FORMATOS PARA A PROPRIEDADE FORMAT Tabela 7 Configurao DescrioFox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 11 de 103 K $ ^ L R Seleciona todo o texto quando um controle recebe o foco. Exibe smbolo de moeda. Exibe dados numricos usando notao cientfica. Em campos numricos exibem zeros esquerda. Exibe o formato da mascara para o contedo do campo, conforme mscara informada em Input mask, porm, s armazena no campo os dgitos ou letras. Exibe um campo nmero em brao, caso seu valor seja zero. Converte caracteres alfabticos para maisculo. Permite apenas caracteres alfabticos Usa o formato especificado com o comando SET DATE para datas. Edita valores Data em formato britnico (British). Remove contedo em branco antes e depois do texto. Exibe valores Data conforme o formato curto configurado no painel de controle do Windows. Exibe valores Data conforme o formato longo configurado no painel de controle do Windows.

Z ! A D E T YS YL

A propriedade Format tem o mesmo significado da clusula FUNCTION para os comandos @... GET e @ ... EDIT, agora suportados apenas para compatibilidade com verses anteriores. DEFININDO OS NDICES PARA UMA TABELA Uma vez que definimos os campos da tabela e j marcamos quais campos gostaramos que fossem ndice, precisamos agora refinar esses ndices acrescentando alguma informao ou simplesmente escolhendo o tipo de ndice apropriado. O tipos de ndice so: Primary ndice primrio ou chave primria, conforme o gosto do fregus. Este tipo de ndice no aceita valor duplicado. Ideal para campos identificadores, CNPJ, CPF, ou qualquer outro que requer um valor nico em toda a tabela. Cadidate um ndice semelhante chave primria. Este tipo de ndice substitui o tipo UNIQUE de verses anteriores do FoxPro e tambm do dBase e Clipper. Uma chave do tipo Cadidate no aceita valores duplicados, por isso uma chave candidata a chave primria. Regular o tipo de ndice comum, usado apenas para indexar uma tabela por uma determinada chave. No Visual FoxPro as chaves estrangeiras so ndices do tipo regular. Para refinar a definio de nossos ndices vamos clicar na aba Indexes e teremos o seguinte dilogo:

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 12 de 103

Figura 11 Definindo ndices Temos as seguintes colunas: - serve para movermos a posio do ndice. Order serve para definirmos de o ndice ser ascendente ( ) ou descendente ( ). Name o nome que daremos para a marca (TAG) de ndice da tabela. So permitidos at 10 caracteres. Type define o tipo do ndice: Primary, Candidate, Regular. Expression define o campo que ser usado na marca de ndice. Chaves compostas podem ser criadas. Para tal, basta concatenarmos a expresso colocando ali os campos que desejamos. Funes nativas do VFP ou definidas pelo usurio tambm podem ser utilizadas nas expresses de ndice. Filter permite criarmos filtros para nossos ndices. Algumas vezes interessante criar ndices com filtro, por exemplo um filtro sem os registros apagados. Collate permite definir a pgina de cdigo para o ndice. Esta opo muito til quando do desenvolvimento de aplicaes internacionais que usam idiomas diferentes. Esta opo est disponvel somente a partir da verso 8 do VFP. Em verses anteriores consegue-se um resultado semelhante atravs do comando SET COLLATE.Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 13 de 103 Para os desenvolvedores vindos do Clipper e outras linguagens, uma pequena orientao: O FoxPro e Visual FoxPro utiliza ndices compostos, ou seja, todos os ndices so armazenados em um nico arquivo fsico (.cdx) ao contrrio do Clipper que para cada ndice seria gerado um arquivo .ntx. Essa caracterstica muito interessante pois elimina a necessidade constante de reindexao. Uma aplicao bem projetada em FoxPro raramente precisar de reindexao, a menos que seja por algum problema ocasionado por hardware, como corrupo de ndices. Agora crie as demais tabelas, baseando-se nas informaes de cada tabela. Agora que nossas tabelas esto criadas, vamos definir os relacionamentos permanentes. Este talvez seja um conceito novo para quem vem de outras linguagens. Mas bastante interessante e com esse tipo de relacionamento temos muito a ganhar. Por exemplo, o relacionamento definido entre uma tabela de clientes com a tabela de contas a receber ser feito de forma automtica quando adicionarmos tais tabelas ao nosso formulrio. No apenas isso, mas regras de integridade podem ser definidas a partir do relacionamento. Vamos ento modificar a estrutura do nosso banco de dados para criar os relacionamentos e a integridade referencial. Com o projeto aberto, clique na aba Data, e ento clique sobre o banco de dados cpedras. Agora clique no boto Modify. As tabelas podem aparecer meio sobrepostas. Clique no menu Database e depois em Arrange..., e ento clique Ok.

Figura 12 Dilogo Arrage Tables e Views. Voc dever obter algo parecido com o apresentado na figura 13 a seguir.

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 14 de 103

Figura 13 Banco de dados depois do comando arrange... Na figura acima fiz questo de destacar o ndice id_usuario. Note que agora as tabelas possuem os campos listados na primeira parte e logo abaixo da lista de campos vem os ndices. O campo de chave primria ter uma ao lado esquerdo da marca de ndice. Definindo relacionamentos Agora vamos definir os relacionamentos entre as tabelas. Este procedimento muito simples. Basta voc arrastar o ndice da tabela pai (lado um) do relacionamento para o ndice da tabela filho (lado muitos). Por exemplo, arrastar o ndice id_cliente para cima do ndice. Defina ento os seguintes relacionamentos: Tabela 8 Tabela Pai Clientes->id_cliente Fornecedores->id_fornece Usuarios->id_usuario Usuarios->id_usuario Tabela Filha ContaReceber->id_cliente ContaPagar->id_fornece ContaReceber->id_usuario ContaPagar->id_usuario

Aps definidos os relacionamentos, teremos a seguinte aparncia no banco de dados. Neste caso, reposicionei as tabelas para dar destaque s linhas ligando as tabelas:

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 15 de 103

Figura 14 Tabelas relacionadas Os relacionamentos do tipo um para muitos so os mais comuns e mais fceis de serem definidos, como o caso que fizemos aqui. Note que o lado um do relacionamento h uma notao parecida com um sinal de mais ( + ) e do lado muitos h uma espcie de gancho com trs pontas. Para definir um relacionamento do tipo um para um atravs da Database Designer, necessrio que ambos os ndices sejam do tipo chave primria. muito importante saber como editar o relacionamento entre as tabelas, pois pode ser que por falta de ateno arrastemos um ndice para outro que no seja o seu correspondente causando assim uma falha de relacionamento. Nenhum erro ocorrer mas muito provavelmente o resultado no ser o esperado. Editando um relacionamento Para editar um relacionamento, basta clicar sobre a linha de relacionamento entre as tabelas com o boto direito e escolher Edit Relationship... Aparecer um dilogo como o apresentado a seguir na figura 15.

Figura 15 Editando relacionamentoFox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 16 de 103 Observe de acordo com a figura 15 que o lado esquerdo representa a tabela a qual o relacionamento inicia-se e o lado direito a tabela qual ela se relaciona. A informao Relationship type exibe se o relacionamento do tipo um para muitos (One To Many) ou um para um (One To One). Note tambm que h um boto Referential Integrity. Atravs deste boto podemos definir a integridade referencial entre as duas tabelas. Para gerar integridade referencial, necessrio abrir o banco de dados em modo exclusivo. Muito provavelmente seu banco j estar aberto em modo exclusivo, mas caso receba uma mensagem como esta:

Voc dever fechar o seu banco de dados e ento abri-lo em modo exclusivo. Em nosso caso, basta digitar o seguinte na janela de comandos: CLOSE ALL ALL OPEN DATABASE cpedras.dbc EXCLUSIVE MODIFY DATABASE cpedras.dbc Definindo a integridade referencial entre as tabelas Como vimos na figura 15, possvel definir a integridade referencial a partir do dilogo de edio do relacionamento. Mas essa no a nica forma. Temos ainda as opes de acessar atravs do menu Database ou do menu de contexto clicando com o boto direito sobre a linha do relacionamento e escolhendo Edit Referential Integrity. Vamos ento clicar com o boto direito sobre o relacionamento entre a tabela de clientes e a tabela ContasReceber e escolher Edit Referential Integrity. Aparecer um dilogo semelhante ao seguinte:

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 17 de 103

Figura 17 Selecionar Builder Este dilogo aparece a fim de selecionarmos o Builder (criador) que ser usado para definir a integridade referencial. O Builder padro do VFP para esssa tarefa o Referential Integrity Builder. Aps selecionar, clique em OK. Agora temos o Builder aberto. Clique sobre a aba Rules for Deleting (Regras para apagar).

Figura 18 definindo integridade referencial. Em nosso caso vamos criar regras (rules) apenas para aes de apagar (delete). Faremos isso para garantir que quando um registro de uma tabela pai for apagado, os registros da tabela filha no fiquem rfos. As opes so: Cascade: apaga todos os registros relacionados na tabela filha.Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 18 de 103 Restrict: probe de apagar se houver registros relacionados na tabela filha. Ignore: permite apagar e mantm intactos os registros relacionados na tabela filha. Do ponto de vista funcional, a melhor das opes a Restrict, uma vez que no permitir apagar um cliente caso esse possua algum lanamento de conta a receber. Caso voc ainda no tenha feito, defina as regras conforme mostra a figura 18 e depois clique em OK. Aparecer o seguinte dilogo:

Figura 19 Escolher fazer ou no cpia das Stored Procedures existentes. Escolha Yes. Caso voc venha a modificar alguma Stored Procedure gerada automaticamente pelo VFP, se voc refizer a integridade atravs do Builder voc perder as modificaes. Por isso a opo de fazer a cpia antes. Aparecer o dilogo a seguir, informando que houve modificao no banco de dados e pergunta se voc quer recarreg-lo. Informe Yes.

Agora vamos dar uma olhada no cdigo gerado:

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 19 de 103

Figura 21 Stored Procedures da integridade referencial Nunca remova as linhas de comentrios antes e depois do cdigo de integridade referencial. Algumas definies: Para garantir essa funcionalidade de forma automtica, o VFP ir criar triggers, ou seja, disparadoras automticos para a ao de excluir das tabelas clientes e fornecedores, apagando os registros de ContasReceber e ContasPagar, respectivamente. Um trigger (disparador) uma expresso ligada a uma tabela e que invocado sempre que h algum tipo de modificao na mesma. Podemos associar expresses triggers para incluir, modificar e apagar registros. Triggers podem ser criados para as mais diversas funes, por exemplo, criar ndices, selecionar determinados registros, fazer lanamentos ou processamentos em tabelas, e assim por diante. O cdigo escrito para um trigger armazenado como stored procedure (procedimentos armazenados) no banco de dados. Uma Stored Procedure um procedimento ou funo, porm este estar armazenado no prprio banco de dados e sua utilizao ser sempre para manipular ou retornar algum dado. CRIANDO UMA STORED PROCEDURE PARA AUTO-INCREMENTO Embora o Visual FoxPro 8.0 j tenha de forma nativa um campo de auto-incremento, vamos criar nossa prpria rotina de auto-incremento atravs de uma stored procedure. Basta adicionar o seguinte cdigo s stored procedures:

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 20 de 103

Figura 22 Cdigo da Stored Procedure GeraCodigo() Essa Stored Procedures capaz de gerar cdigo seqencial para qualquer tabela do banco de dados, desde que sejam seguidas as seguintes regras: O campo seqencial seja sempre o primeiro campo da tabela. O campo seqencial seja sempre do tipo caractere.

claro que para gerar cdigo seqencial para campos do tipo numrico ou inteiro basta alterar a funo. Fica a gosto do fregus. Uma vez que a funo j est inclusa no banco, juntamente com as Stored Procedures, vamos alterar a estrutura das nossas tabelas e adicionar a funo ao valor inicial do campo seqencial. Para isso, modifique o banco de dados e clique sobre o nome da tabela que quer alterar. Vamos comear pela tabela de clientes. Clique sobre o boto Modify aps selecionar a tabela. Selecione o campo id_cliente e faa a modificao conforme destaque na prxima figura e depois clique em OK.Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 21 de 103

Figura 23 definindo funo de auto-incremento ao valor padro do campo Agora repita a mesma operao para as outras quatro tabelas. Lembre-se apenas sobre o campo ID da prpria tabela. Humm... j estava me esquecendo... muito provavelmente voc deve estar curioso pra saber onde que vai a chamada ao cdigo do trigger para apagar os registros. Muito bem, modifique a tabela de clientes e v aba Table e veja, conforme figura 24:

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 22 de 103

Figura 24 Trigger apagar clientes. Muito bem, a parte de banco de dados est finalmente pronta! Agora partiremos para conhecer os formurios. TRABALHANDO COM FORMULRIOS Os formulrios so considerados a principal forma de interagir com o usurio da aplicao. So atravs deles que os usurios inserem dados, escolhem opes, e realizam tudo que precisam no sistema. H outras formas de interao como os menus, relatrios, etc. Como quase tudo no Visual FoxPro, existe mais de uma forma de programar os formulrios. Os mesmos podem ser criados a partir da Form Designer ou programados diretamente atravs de PRGs. Com certeza a primeira opo ser mais produtiva uma vez que tudo pode ser feito de forma visual, enquanto que a segunda precisa de ser codificada na munheca. Como nosso objetivo produzir mais em menos tempo, vamos partir para a Form Designer. A ferramenta Gerenciador de Projetos possui uma aba dedicada aos documentos que so Formulrios, Relatrios e Etiquetas.

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 23 de 103

Figura 25 Aba Documents do gerenciador de projetos Vamos criar um formulrio e estudarmos os seus principais elementos. Estando na aba Documents, clique em Forms e depois em New... Aparecer o seguinte dilogo:

Figura 26 Dilogo New Form No dilogo acima, escolha New Form. A Form Designer ser aberta, conforme mostra a prxima figura.

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 24 de 103

Figura 27 Ferramenta Form Designer A Form Designer praticamente a ferramenta mais complicada de se entender no Visual FoxPro. Uma vez que voc a domine, achar as demais ferramentas fceis de serem usadas. Na figura 27 temos a rea de desenho do formulrio onde iremos inserir todos os controles. Temos tambm a barra de ferramentas Form Controls. Essa barra de ferramentas disponibiliza ao desenvolvedor todos os controles possveis de se inserir em um formulrio. So os controles bsicos do Visual FoxPro. Como podemos personalizar (subclassificar) cada um desses controles e criar os nossos prprios, temos ainda a opo de anexar nossas bibliotecas de controles para serem exibidas na barra de ferramentas Form Controls. Assim que a Form Designer aberta um novo menu chamado Form adicionado barra de menus. Esse menu serve para disparar algumas opes relacionadas ao formulrio. Veja a figura 28:

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 25 de 103

Figura 28 Menu Form medida que formos precisando, exploraremos estas opes. Temos ainda um componente muito importante. Na verdade to importante quanto a Form Designer. a janela de propriedades, a qual utilizamos para configurar desde o formulrio at as mais diversas caractersticas de cada controle nele incluso. Veja a figura 29:

Figura 29 Janela de Propriedades

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 26 de 103 Atravs da janela de propriedades podemos configurar as Propriedades, Eventos e Mtodos (PEMs) dos formulrios e de qualquer outro Objeto visual que estiver contido no formulrio, relatrio e at mesmo da janela principal do Visual FoxPro (_Screen). H cinco abas nessa janela: All, Data, Methods, Layout e Other. Vejamos para que servem: All exibe a lista completa de todos as PEMs. Data exibe as propriedades relacionadas a dados. Methods exibe todos os mtodos e eventos do controle selecionado. Layout exibe todas as propriedades relacionada com o formato de exibio do objeto selecionado. Other exibe outras propriedades adicionais. Algumas coisas que voc deve saber 1. Para editar uma propriedade, evento ou mtodo a partir da janela de propriedades basta clicar sobre a propriedade e depois editar o valor na caixa de edio, conforme figura 30. No caso do evento ou mtodo, voc deve clicar duplo.

Figura 30 Caixa de edio de propriedade 2. Quando voc altera uma propriedade, o valor alterado aparecer em negrito na janela de propriedades facilitando a identificao. 3. Os valores que aparecem no formato itlico so valores somente leitura (ready only), ou seja, no podem ser editados. Alm dos componentes j apresentados temos um outro que tambm muito importante. Trata-se do Ambiente de Dados (Data Environment). O ambiente de dados responsvel por gerenciar a abertura e fechamento das tabelas do banco de dados, alm de oferecer recursos de Buffer (proteo). claro que no obrigatria a utilizao do ambiente de dados. Mas j que um recurso que est disponvel e funciona muito bem, porque no utiliz-lo? Atravs do ambiente de dados (Data Environment) podemos adicionar tabelas do banco de dados, tabelas soltas (free tables) ou ainda views (vises). As tabelas que sero apresentadas ou manipuladas neste ambiente podem ser operadas desde os mais clssicos comandos do mundo xBase como APPEND BLANK, REPLACE, at comandos SQL como INSERT SQL, UPDATE SQL, DELETE SQL, SELECT SQL, etc.

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 27 de 103 Em nosso primeiro formulrio vamos procurar usar a maioria das ferramentas aqui apresentadas, de forma que as conheamos na prtica. Com o formulrio que criamos agora h pouco, vamos configurar algumas propriedades para melhor adequ-lo realidade de nosso software. Vamos criar um formulrio para cadastro/manuteno de usurios do sistema. Vamos fazer as seguintes configuraes: 1. Com o formulrio aberto, clique sobre o mesmo e depois clique sobre a aba Layout da janela de propriedades. 2. Localize a propriedade Caption e clique sobre a mesma e ento digite Cadastro de Usurios. Ao pressionar ENTER, o ttulo do formulrio ser mudado de Form1 para o aqui informado. 3. Mude a propriedade AutoCenter para .T. (True). Isto far com que a janela seja centralizada automaticamente ao ser aberta. 4. Ajuste a propriedade ShowTips para .T. (True). 5. Agora mude para a aba Data da janela de propriedades, localize a propriedade BufferMode e altere-a para 2 Optmistic. Isso definir o tipo de bloqueio empregado na hora de realizar as alteraes no banco de dados para otimista, ou seja, s tentar o bloqueio quando for efetivar a gravao atravs da funo TABLEUPDATE(). 6. Nesta aba, altere ainda a propriedade DataSession para 2 Private Data Session. Isso garantir que cada instncia desse formulrio ter uma sesso de dados separada. importante saber que quando um formulrio usa uma sesso de dados privada, todos os comandos SET para configurao de ambiente devem ser configurados dentro do prprio formulrio. claro que isso parece trabalhoso medida que nossos formulrios vo aumentando, mas graas s tcnicas de Programao Orientada a Objetos (OOP) tudo isso muito fcil. Vinculando os dados e inserindo os campos Em nosso aplicativo, vamos utilizar o ambiente de dados (data environment) para controlar a manipulao dos dados em nossos formulrios. Para tal, precisamos adicionar ao ambiente de dados a tabela que iremos utilizar: 1. Clique sobre a rea do formulrio com o boto direito do mouse e escolha Data Envivonment... 2. No dilogo Add Table ou View, escolha a tabela de usurios e depois clique sobre o boto Add, conforme figura 31, depois clique em Close.

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 28 de 103

Figura 31 Dilogo Add Table or View 3. Agora aparece o ambiente de dados, conforme figura 32:

Figura 32 Data Environment (ambiente de dados) 4. Agora selecione os campos da tabela usuarios. Voc pode segurar a tecla SHIFT enquanto sobre os campos. Uma vez selecionados, clique com o boto direito do mouse e arraste-os para a rea de design do formulrio, conforme mostra a figura 33.

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 29 de 103

Figura 33 Arrastando os campos para a rea de design do formulrio 5. Assim que voc soltar o boto do mouse aparecer um menu com trs opes, conforme a figura 33. Escolha Create Multiple Controls Here. Os controles sero criados, conforme mostra a prxima figura:

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 30 de 103

Figura 34 Controles inseridos no formulrio Agora que os controles esto inseridos no formulrio, podemos comear a programar nosso formulrio. Antes porm, gostaria de chamar sua ateno para as propriedades que foram definidas para cada controle TextBox. Para tal, feche a janela Data Environment e em seguida clique numa rea do formulrio onde no contm nada para desfazer a seleo dos objetos. Verificando as propriedades de um controle 1. Clique sobre o controle que deseja verificar as propriedades. No nosso caso, clique sobre o controle do tipo TextBox para entrada do ID do usurio. O nome do controle txtId_usuario e ganhou esse nome automaticamente ao arrastarmos o controle para o formulrio. Por padro o Visual FoxPro adiciona um prefixo de trs letras a cada controle que voc arrastar, identificando o tipo de campo. Essa uma prtica que bom seguirmos para termos padronizao e tambm para sabermos identificar facilmente o tipo de controle que est sendo utilizado. 2. Se a janela de propriedades estiver aberta, apenas clique nela e v para a bada Data. Caso contrrio, clique com o boto direito sobre o objeto txtId_usuario e escolha Properties. V ento para a aba Data conforme dito anteriormente.Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 31 de 103

Figura 35 Propriedades do controle txtId_usuario 3. Note que a propriedade ControlSource foi preenchida com o valor usurios.id_usuario. Isto significa que a fonte de dados para este control ser o campo id_usuario da tabela usurios. 4. Aproveite e verifique os demais controles.

TABELA DE PREFIXOS SUGERIDOS Embora os prefixos no sejam requeridos, utiliz-los tornar nosso cdigo bem mais profissional e fcil de ser entendido. A seguir est uma lista dos prefixos sugeridos pela Microsoft: Tabela 9 Prefixo Chk Col Cbo Cmd Cmg Cnt Ctl Cad Dte Edt Frm Frs Grd Grc Grh Hpl Img Lbl Lin Lst Olb Ole Opt Opg Pag Pgf Prj Sep Shp Spn Txt Tmr Tbr Xad Xfd Xtb

DataEnvironment EditBox Form FormSet Grid Column Header HyperLink Image Label Line ListBox OLEBoundControl OLE OptionButton OptionGroup Page PageFrame ProjectHook Separator Shape Spinner TextBox Timer ToolBar XMLAdapter XMLField XMLTable

dteSalesForm edtTextArea frmFileOpen frsDataEntry grdPrices grcCurrentPrice grhTotalInventory hplHomeURL imgIcon lblHelpMessage linVertical lstPolicyCodes olbObject1 oleObject1 optFrench opgType pagDataUpdate pgfLeft prjBuildAll sepToolSection1 shpCircle spnValues txtGetText tmrAlarm tbrEditReport xadRemoteXMLData xfdPrices xtbInventory

Nosso formulrio de Cadastro de Usurios dever ficar com a aparncia exibida na figura 36. Os botes de comando para todos os demais formulrios de cadastro sero os mesmos. Por isso bom planejarmos para que o cdigo seja 100% reutilizvel. Dessa forma estaremos aplicando bem os conceitos da OOP.

Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 33 de 103

Figura 36 Janela de Cadastro de Usurios Nosso formulrio ter os seguintes mtodos e propriedades personalizados: Tabela 10 - MTODOS MTODO BloquearRegistro() CoordenaBotoes() CoordenaControles() CoordenaNavegacao() CriticarDados() PosicionarPrimeiroCampo() OBJETIVO Bloqueia o registro para operaes de alterao e remoo (delete). Coordena o estado dos botes do formulrio de acordo com cada operao. Coordena o estado dos controles de edio dos dados, tornando-os editveis ou no editveis. Coordena o estado dos botes de navegao do formulrio. Reservado para a escrita de cdigo para validao dos dados do formulrio. Executa o comando armazenado na propriedade PrimeiroCampoFoco. usado para posicionar o cursor no campo que ser o primeiro foco em operaes de adio e edio de registros. Faz o tratamento de erros do formulrio.

TratarErro()

Tabela 11 - PROPRIEDADES PROPRIEDADE OBJETIVO PrimeiroCampoFoco Nesta propriedade ser colocado o comando responsvel pelo posicionamento do foco no primeiro campo editvel. Alm dos mtodos j apresentados, ainda iremos programar o evento Init do formulrio a fim de definirmos as configuraes iniciais do formulrio. Sim, eu disse programar o evento Init. O fato que um evento tambm pode ser programado como um mtodo. Ou seja, podemos determinar cdigo para ser executado quando um evento ocorre. Assim o cdigo programado no evento Init logo ser o mtodo Init. Pra descomplicar um pouco, apenas tenha em mente que o evento em si no faz nada. Ele apenas ocorre e pronto. A, para facilitar nossa vida podemos escrever cdigos quando eles ocorrem. Ao cdigo escrito ali no evento, denominamos mtodo.Fox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 34 de 103 Antes de prosseguirmos bom que conhecermos a ordem de ocorrncia dos principais eventos de um formulrio do Visual FoxPro a fim de que quando precisarmos codific-los no venhamos cometer alguns enganos. Tabela 12 - ORDEM DE OCORRNCIA DOS PRINCIPAIS EVENTOS NUM FORMULRIO EVENTO DESCRIO Load Ocorre antes do objeto form (ou outro qualquer) ser criado. Caso queira evitar a criao condicional de um form, use um RETURN .F. a patir do evento Load e o objeto no ser criado. Init Ocorre quando o objeto criado. Cada objeto ou controle incluso no formulrio tambm possui um evento init. Todos os eventos Inits de cada controle includo no formulrio ocorrem antes do Init do formulrio, ou seja, todos os inits dos objetos contidos ocorrem antes do evento Init do container (formulrio, recipiente). Voc pode usar o evento init para fazer configuraes no formulrio ou nos demais controles deste. Show Apesar deste no ser classificado como um evento propriamente dito, o terceiro a ocorrer quando da ativao normal de um formulrio. usado para mostrar o formulrio e ainda para configurar a forma como o mesmo ser exibido. Activate Ocorre no momento que o formulrio exibido e torna-se ativo. GotFocus Quando da ativao de um formulrio, o primeiro objeto da lista que estiver inserido no formulrio receber o foco. Este evento ocorre exatamente no momento em que o primeiro objeto recebe o foco. Ocorre tambm a partir da sempre que um objeto recebe o foco dentro do formulrio. importante saber que diversos outros tipos de objetos tambm possuem Propriedades, Eventos e Mtodos (PEMs) de mesmo nome. Apesar de terem PEMs de mesmo nome, a execuo desses PEMs em um objeto no interfere na execuo dos PEMs de outro objeto. A esta caracterstica damos o nome de ENCAPSULAO. Agora que j estamos conhecendo a ordem de ocorrncia dos eventos quando da execuo de um formulrio j podemos ter idia de onde adicionar o cdigo. Existem diversos outros eventos que ocorrem quando um formulrio est sendo executado, mas medida que formos precisando deles passaremos a conhec-los em mais detalhes. ADICIONANDO BOTES DE AO AO FORMULRIO Os botes de ao ou botes de comando so usados para disparar aes a serem executadas. O Windows est cheio deles. No Visual FoxPro no diferente. Quando estamos programando um formulrio para insero e manuteno de dados numa tabela poderemos terFox Total Network http://www.foxtotal.com.brCopyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 35 de 103 vrios botes com aes como essas: Novo, Gravar, Editar, Desfazer, Excluir, Primeiro, Anterior, Prximo, ltimo e assim por diante, conforme a necessidade do projeto. Cada ao requer a especificao de cdigo para executar a tarefa a qual o boto se prope. Nessa etapa do nosso estudo, vamos lidar com os botes de ao para comearmos a dar vida aos nossos formulrios. De nada adianta termos belas interfaces, se essas no puderem realizar o trabalho esperado sobre os dados. O Visual FoxPro possui algumas classes prontas chamadas Foundation Classes ou simplesmente FFC. Algumas dessas classes so interessantes e funcionam bem. Inclusive h classes prontas para a maioria das aes que citei anteriormente. Entretanto, como o objetivo deste texto conduzi-lo ao aprendizado programtico, mostrando como fazer, vamos desenvolver nosso prprio cdigo. Assim voc ter a oportunidade de aumentar seus conhecimentos. Adicionar um boto ao formulrio tarefa simples. Basta clicar sobre Command Button na barra de ferramenta Form Controls e em seguida posicionar o cursor no local onde deseja adicionar o boto ao formulrio e clicar. A seguir est a descrio dos objetos Buttons que teremos em nosso formulrio e quais propriedades e mtodos devemos alterar ou escrever. BOTES A SEREM INSERIDOS NO FORMULRIO Tabela 13 PROPRIEDADE Caption Name Picture Height Left PicturePosition Top Width EVENTO/MTODO Click Event BOTO: Novo VALOR A ATRIBUIR \