Você está na página 1de 103

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.br


Copyright 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.br
Copyright 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 Project


Fox Total Network http://www.foxtotal.com.br
Copyright 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.br
Copyright 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.br
Copyright 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

Tamanho
Fox Total Network http://www.foxtotal.com.br
Copyright 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 3


Fox Total Network http://www.foxtotal.com.br
Copyright 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.br


Copyright 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.br
Copyright 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 Descrio
Fox Total Network http://www.foxtotal.com.br
Copyright 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.br


Copyright 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.br
Copyright 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.br


Copyright 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.br


Copyright 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 relacionamento


Fox Total Network http://www.foxtotal.com.br
Copyright 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.br


Copyright 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.br
Copyright 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.br


Copyright 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.br


Copyright 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.br
Copyright 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.br


Copyright 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.br


Copyright 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.br


Copyright 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.br


Copyright 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.br


Copyright 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.br


Copyright 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.br


Copyright 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.br


Copyright 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.br


Copyright 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.br
Copyright 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 <userTipo de Objeto CheckBox Collection ComboBox CommandButton CommandGroup Container Control CursorAdapter Custom Exemplo
chkReadOnly colFormObjects cboEnglish cmdCancel cmgChoices cntMoverList ctlFileList cadInventory user-defined Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 32 de 103 defined> 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.br


Copyright 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.br
Copyright 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 ter
Fox Total Network http://www.foxtotal.com.br
Copyright 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 \<Novo bntNovo imagens\new.bmp 27 3 1 179 78 CDIGO A EXECUTAR

Tabela 14 PROPRIEDADE Caption Name Picture BOTO: Gravar VALOR A ATRIBUIR \<Gravar bntGravar imagens\save.bmp
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 36 de 103 Height Left PicturePosition Top Width EVENTO/MTODO Click Event 27 80 1 179 78 CDIGO A EXECUTAR

Tabela 15 PROPRIEDADE Caption Name Picture Height Left PicturePosition Top Width EVENTO/MTODO Click Event BOTO: Editar VALOR A ATRIBUIR \<Editar bntEditar Imagens\wzedit.bmp 27 157 1 179 78 CDIGO A EXECUTAR

Tabela 16 PROPRIEDADE Caption Name BOTO: Desfazer VALOR A ATRIBUIR \<Desfazer bntDesfazer
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 37 de 103 Picture Height Left PicturePosition Top Width EVENTO/MTODO Click Event imagens\wzundo.bmp 27 234 1 179 78 CDIGO A EXECUTAR

Tabela 17 PROPRIEDADE Caption Name Picture Height Left PicturePosition Top Width EVENTO/MTODO BOTO: Excluir VALOR A ATRIBUIR E\<xcluir bntExcluir imagens\wzundo.bmp 27 311 1 179 78 CDIGO A EXECUTAR

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 38 de 103 Click Event

Tabela 18 PROPRIEDADE Caption Name Picture Height Left PicturePosition Top ToolTip Text Width EVENTO/MTODO Click Event Tabela 19 PROPRIEDADE Caption Name BOTO: Registro Anterior VALOR A ATRIBUIR bntAnterior
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

BOTO: Primeiro Registro VALOR A ATRIBUIR bntPrimeiro imagens\wztop.bmp 27 390 1 179 Primeiro Registro 26 CDIGO A EXECUTAR

Visual FoxPro 8.0 O Caminho das Pedras Pgina 39 de 103 Picture Height Left PicturePosition Top ToolTip Text Width EVENTO/MTODO Click Event Tabela 20 PROPRIEDADE Caption Name Picture Height Left PicturePosition Top ToolTip Text Width EVENTO/MTODO Click Event Tabela 21 PROPRIEDADE Caption Name Picture Height Left PicturePosition Top ToolTip Text Width EVENTO/MTODO Click Event Tabela 22 PROPRIEDADE Caption Name Picture BOTO: Fechar VALOR A ATRIBUIR Fecha\<r bntFechar imagens\wzclose.bmp
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

imagens\wzback.bmp 27 416 1 179 Registro Anterior 26 CDIGO A EXECUTAR

BOTO: Prximo Registro VALOR A ATRIBUIR bntProximo imagens\wznext.bmp 27 442 1 179 Prximo Registro 26 CDIGO A EXECUTAR

BOTO: ltimo Registro VALOR A ATRIBUIR bntUltimo imagens\wzend.bmp 27 468 1 179 ltimo Registro 26 CDIGO A EXECUTAR

Visual FoxPro 8.0 O Caminho das Pedras Pgina 40 de 103 Height Left PicturePosition Top Width EVENTO/MTODO Click Event 27 496 1 179 78 CDIGO A EXECUTAR

Talvez voc esteja pensando muitas coisas nesse momento, mas com certeza uma delas deve ser: Como fao para atribuir essas configuraes e escrever o cdigo de cada evento/mtodo? Pois bem, vamos l! Primeiro voc deve clicar sobre o objeto que deseja atribuir as propriedades ou o cdigo. Depois clique com o boto direito e escolha Properties. Para seguir uma seqncia lgica, comece pelo boto Novo. Aps clicar em Properties, voc ter a janela de propriedades aberta, como mostra a figura 37:

Figura 37 Propriedades do boto novo. Agora s definir o valor de cada propriedade conforme indica a tabela 13.

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 41 de 103 O cdigo do evento Click, conforme tabela 13 deve ser digitado no evento clique do boto Novo. Para isso voc deve acessa a aba Methods e localizar o Click Event, d dois cliques sobre o mesmo e abrir o editor de programas para voc digitar o cdigo:

Figura 38 Editor de Programas, editando evento Click do boto Agora defina todas as propriedades para os botes e tambm o cdigo do evento Click conforme ilustra as tabelas de nmero 13 a 22. Alm do cdigo do evento Click de cada boto, nosso formulrio ainda contm cdigo nos mtodos relacionados na tabela 10. A seguir esto relacionados os mtodos e os seus respectivos cdigos. Tabela 23 MTODO BloquearRegistro CDIGO DO MTODO

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 42 de 103 CoordenaBotoes()

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 43 de 103

CoordenaControles()

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 44 de 103 CoordenaNavegacao()

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 45 de 103

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 46 de 103 CriticarDados()

PosicionarPrimeiroCampo()

TratarErro()

O cdigo a seguir o cdigo bsico para tratamento de erros do nosso formulrio.

*!* Walfrans, essa vai em sua homenagem :) *TratarErro * Gerencia os erros de Integridade Referencial * (IR), emite mensagem * e focaliza o campo responsvel pelo erro. * Cdigos dos erros de IR * 1884 - Unicidade * 1539 - Falha no disparador =AERROR(dados) *-A funo AERROR( ) cria uma matriz, * retornando o nmero de linhas da matriz. * Nmero do elemento Descrio * 1 Numrico. Contm o nmero do erro. * Idntico ao valor retornado por ERROR( ). * 2 Caractere. O texto da mensagem de erro. * Idntico ao valor retornado por MESSAGE( ). Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 47 de 103


* * * * * * * * * * * * * * * 3 O valor nulo. No entanto, se o erro possuir um parmetro de erro adicional, ir conter o texto do parmetro de erro. Idntico ao valor retornado por SYS(2018). O valor nulo, ou, quando apropriado, contm o nmero da rea de trabalho em que o erro ocorreu. O valor nulo, ou, SE UM DISPARADOR FALHAR, (erro 1539), ir conter um dos valores numricos abaixo: 1 - Erro no Disparador de insero. 2 - Erro no Disparador de atualizao. 3 - Erro no Disparador de excluso. O valor nulo. O valor nulo.

4 5

6 7

EXTERNAL ARRAY GAERRORS * Matriz publica que criada pelo Fox * na Integridade Referecial. * Contm mais informaes do que AERROR(). * No est documentada no Help. * Os elementos no listados so * iguais aos de AERROR. * Nmero do elemento Descrio * 2 (c) Mensagem de erro com o gatilho que falhou. * Idntico ao valor retornado por MESSAGE( ). * 5 DBF Pai (c) Na Integridade Referencial (IR), a * tabela Pai a que sofre a ao (tabela de destino) * 6 Rec Pai (n) * 7 Id Pai (c) * 8 Expr Pai (c) * 9 DBF Filho (c), tabela origem da relao. * 10 Rec Filho (n) * 11 Id Filho (c) * 12 Expr Filho (c) Se ocorrer falha de disparador * na IR, ser este o campo com problema DO CASE CASE dados(1) = 1884 && Unicidade violada

MESSAGEBOX("A chave do ndice foi violada.",0+16,"Erro") RETURN CASE dados(1) = 1585 OR dados(1) = 1494 * Erro 1585 Registro modificado por outro usurio ou * Erro 1494 Conflito de atualizao. IF dados(1) = 1585 cMsgErro = "Registro modificado por outro usurio" ELSE cMsgErro = "Registro modificado por outro usurio" ENDIF *-- Caixa de Mensagem "Interrogao" * botes "Ok / Cancelar" * default "1 Boto" LOCAL lnNrBotao Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 48 de 103


lnNrBotao = MESSAGEBOX( ; cMsgErro + CHR(13)+CHR(13)+[Pressione: ]+CHR(13); +[ OK para forar a gravao;]+CHR(13); +[ Cancelar para desfazer.]+CHR(13)+[], ; 32+1+0, ; [Erro atualizando o banco de dados]) *-- testa a resposta do usurio IF lnNrBotao = 1 && OK IF TABLEUPDATE(0,.T.) Thisform.CoordenaBotoes("PADRAO") RETURN ELSE *-- Caixa de Mensagem "Exclamao" * botes "Ok" * default "1 Boto" = MESSAGEBOX( ; [No foi possivel gravar as alteraes!!!]; +CHR(13)+CHR(13); +[A operao ser cancelada.], ; 48+0+0, ; [Erro atualizando o banco de dados]) ENDIF ENDIF *-executa esta parte se o TABLEUPDATE *-- acima no retornou .T. ou *-se o operador apertou o boto Cancelar (lnNrBoto = 2) TABLEREVERT() Thisform.CoordenaBotoes("PADRAO") RETURN OTHERWISE *-- Caixa de Mensagem "Exclamao" * botes "Ok" * default "1 Boto" = MESSAGEBOX( ; [Erro nmero: ] + alltrim(str(dados(1))); +CHR(13)+CHR(13); +dados(2)+CHR(13)+CHR(13); +[O programa ser cancelado!]; +CHR(13)+[], ; 48+0+0, ; [Erro inesperado]) ON ERROR ON SHUTDOWN *-- Cancela a execuo CANCEL *-- Termina o ciclo de eventos CLEAR EVENTS ENDCASE

EVENTO

CDIGO DO EVENTO

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 49 de 103 Init

Agora a tabela 24 traz a lista de valores a serem configurados para propriedades do formulrio. Tabela 24 ATRIBUIO DE VALOR A PROPRIEDADE PROPRIEDADE VALOR A ATRIBUIR PrimeiroCampoFoco Thisform.txtNomeUsuario.SetFocus() Apesar de todo o cdigo fonte disponvel para os mtodos do formulrio j estarem disponveis nas tabelas acima, voc ainda nem aprendeu como inserir os mtodos no formulrio. Faamos isso nesse momento. INSERINDO NOVOS MTODOS E PROPRIEDADES AO FORMULRIO Anteriormente, ainda no incio do assunto de formulrios apresentamos a figura do menu Form. Este menu ser usado para criar os mtodos e propriedades:

Figura 28 Menu Form 1. Clique no menu Form e sem seguida em New Method...

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 50 de 103

Figura 39 Criando um novo mtodo 2. Em Name informe o nome do mtodo. No coloque os parnteses. Cloque tambm uma breve descrio do que o mesmo faz em Description. 3. Clique sobre o boto Add. Faa isso para todos os mtodos que precisas criar para o formulrio. Para adicionar propriedades o procedimento parecido. 1. Clique no menu Form e depois escolha a opo New Propertie...

Figura 40 Criando uma nova propriedade 2. Em Name informe o nome da propriedade e tambm informe uma breve descrio para o que serve a propriedade. 3. Clique em Add. Pronto! A propriedade estar l disponvel para ser ajustada. Agora que a propriedade est disponvel, clique sobre o formulrio, depois clique com o boto direito do mouse e escolha Properties. Na janela de propriedades, escolha a aba All e v para o final da lista. Deve aparecer a propriedade. Informe o valor Thisform.txtNomeUsuario.SetFocus() para a mesma.
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 51 de 103 Aps realizadas todas as alteraes proposta acima, seu formulrio dever estar pronto. claro que voc pode melhorar a aparncia conforme seu gosto, movendo os objetos para os locais que melhor lhe atraia e at mesmo inserindo outros objetos de interface. Agora chegou a hora de executarmos nosso formulrio para test-lo. Quando for testar, faa-o devagar, seno poder se ferir. O que acho fantstico no Visual FoxPro poder mesmo no ambiente de design ver o resultado daquilo que estamos fazendo sem ter que compilar o projeto e gerar um executvel. Para executar o formulrio basta voc clicar sobre o boto . Faa isso ento e vers o resultado semelhante figura 36. A diferena ser os dados ainda no preenchidos em sua tabela.

Figura 36 Formulrio de Cadastro de Usurios sendo executado. Ainda h uma coisa a se fazer. Como nosso formulrio possui um ambiente de dados privado, toda a configurao externa a este no incorporada. Por exemplos os registros apagados podero aparecer causando uma impresso de que o boto excluir no funciona corretamente. Como configurao de ambiente algo que utilizaremos em diversos locais, inclusive em formulrios, relatrios e at mesmo em PRGs, faremos uma classe que possa ser reutilizada quando houver necessidade. Se estiver com o formulrio aberto, feche-o. CRIANDO UMA CLASSE PARA CONFIGURAO DE AMBIENTE 1. Com o projeto aberto, clique sobre a aba Classes. 2. Clique no boto New...

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 52 de 103

Figura 43 Criando uma nova classe 3. No dilogo New Class, exibido na figura 42, informe SetagemAmbiente como Class Name, Based On como Custom e Sore In, informe ambiente.vcx. O arquivo ambiente.vcx passar a ser a biblioteca de classes para classes de ambiente em nosso projeto. Click em OK. 4. Aparecer a janela do Class Designer conforme mostra a figura 43.

Figura 43 Class Designer editando SetagemAmbiente 5. D dois cliques sobre a classe SetagemAmbiente. Aparecer a janela do editor de programas onde voc dever abrir o evento Init e digitar o seguinte cdigo:

Figura 44 Cdigo da classe SetagemAmbiente 6. Feche a janela de edio de cdigo. Feche tambm o Class Designer.
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 53 de 103 7. Voltando ao Gerenciador de Projetos, voc ver que a classe que criamos j aparece na lista de classes. 8. Agora abra novamente o formulrio usurios para ser modificado. Vamos incluir a classe que acabamos de criar no formulrio. 9. Observe a figura 45, onde esto posicionadas as duas janelas (Gerenciador de Projetos e Usurios). Com a janela do Gerenciador de Projetos aberta, clique sobre a classe SetagemAmbiente e segurando o boto do mouse arraste-a para dentro do formulrio de usurios. O resultado ser algo como o seguinte:

Figura 45 Instanciando um objeto a partir da classe SetagemAmbiente 10. Pronto, agora s voc arrastar o objeto SetagemAmbiente1 que foi instanciado dentro do formulrio usurios. Somente o simples fato dele estar l dentro o cdigo j ser executado, uma vez que o cdigo da classe fra escrito dentro do evento Init do mesmo.
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 54 de 103 11. Salve o formulrio e execute-o. Inclua registros e os apague e veja que agora tudo funciona perfeitamente. Agora que o formulrio est pronto e funcionando, vencemos a primeira etapa. Voc j deve ser capaz de programar outros formulrios com caractersticas semelhantes. Por exemplo o formulrio de Cadastro de Clientes e o de Cadastro de Fornecedores. Antes porm de passar a desenvolver esses outros formulrios quero comentar um pouco sobre algumas partes do cdigo principalmente alguns termos usados. As figuras utilizadas para os botes do formulrio esto disponveis a partir da rea de download do frum no seguinte link: http://www.foxbrasil.com.br/forum/viewtopic.php?t=129.

ENTENDENDO O MODELO DE OBJETOS DO VISUAL FOXPRO Em qualquer linguagem orientada a objetos (OOL) preciso que conheamos o modelo de objetos ou seja a estrutura hierrquica dos objetos para que possamos obter xito. Com Visual FoxPro esse conceito mais vlido que nunca. O modelo de objetos pode ser considerado a um grande recipiente. Pra ficar mais claro ainda vamos comparar esse recipiente como sendo ao muro que cerca uma casa. Esse muro possui suas caractersticas (propriedades) por exemplo, altura, largura, comprimento, espessura, cor, composio (material utilizado) e outros. Dentro do muro h vrias coisas, por exemplo uma casa, um jardim, etc. Tanto a casa e o jardim ambos possuem suas propriedades que voc mesmo pode imaginar quais so e enumer-las. Dentro da casa h diversas dependncias como sala, quarto, cozinha, varanda, garagem, banheiros, etc. Cada dependncia possui suas caractersticas e tambm um objetivo especfico para proporcionar uma certa funo s pessoas que moram na casa. Se fssemos enumerando os relacionamentos das propriedades e funes de cada um desses objetos, teramos uma enorme rvore hierrquica. Gostaria que voc desse uma olhada na seguinte planta baixa de uma casa e imaginasse a relao hierrquica entre cada objeto:

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 55 de 103

Imagine a linha preta em volta como sendo o muro. A rea verde representa o jardim e a planta interior a casa com suas dependncias e objetos em cada dependncia. Usando uma semntica de notao semelhante do Visual FoxPro, onde cada objeto contido em outro separado por um ponto ., se fssemos descrever o que temos na casa faramos algo como o que se segue: Muro.Jardim.Casa.Sala.Sof1.Cor = Marrom Muro.Jardim.Casa.Quarto1.Cama.Tipo = Casal Muro.Jardim.Grama.Cor = Verde

Muito bem, vou parar por aqui a analogia que fiz com a casa. Agora vamos tentar entender como funciona o Modelo de Objetos do Visual FoxPro. Quando voc abre o Visual FoxPro a primeira coisa que temos uma grande janela contendo vrias barras de ferramentas, etc. Essa a janela principal do Visual FoxPro e no modelo de objetos ela representada com o nome _Screen.

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 56 de 103 A partir do Objeto _Screen muitos outros podem ser adicionados, por exemplo formulrios, barras de ferramentas, etc, etc. medida que vamos adicionando objetos dentro de outro objeto estamos implicitamente criando uma hierarquia entre esses objetos, de forma que para acessar o objeto contido, precisamos especificar tambm o recipiente (container), ou seja, aquele que contm o objeto contido. O Visual FoxPro gerencia muito bem a hierarquia dos objetos. Em um nvel mais superior como do objeto _Screen, muito raramente precisaremos gerenci-los. No entanto, para definir programaticamente propriedades, chamar mtodos, disparar eventos, etc, precisamos pelo menos acessar os objetos na hierarquia em nvel do formulrio em questo. No nosso caso do formulrio de Usurios, onde o nome do mesmo usuarios poderamos fazer algo como o seguinte para preencher um valor no campo Nome do usurio: Usuarios.txtNomeUsuario.Value = NILTON PAULINO Sendo: Usuarios -> Nome do formulrios txtNomeUsuario -> Objeto TextBox para o campo nome do usurio Value -> Propriedade do objeto txtNomeUsuario que ir armazenar o nome do usurio. Vamos ver como isso funciona na prtica? Abra o seu formulrio de usurios para modificar e depois clique no boto executar formulrio . Agora, ative a janela de comandos pressionando CTRL+F2. Agora digite na janela de comandos Usuarios.txtNomeUsuario.Value = NILTON PAULINO Imagino que voc v colocar o seu nome. Tudo bem, eu no ligo. Quando voc pressionar ENTER o valor j est alterado no objeto txtNomeUsuario. Viu como fcil? Muito bem, agora vamos ver algumas formas relativas de se acessar objetos. Imagine que num mtodo genrico desenvolvido para ser reaproveitado com vrios outros formulrios de nomes diferentes voc precise acessar alguns botes, mtodos, propriedades.
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 57 de 103 S que voc no saber qual o nome do formulrio. Por isso ficar invivel usar da forma que fizemos acima. Para contornar esse problema existe uma palavra chamada THISFORM. Thisform quer dizer este formulrio. Ou seja, faz uma referncia ao formulrio que est executando o cdigo sem se importar qual o seu nome. Se voc tentar executar o comando: Thisform.txtNomeusuario.Value = NILTON PAULINO na janela de comandos voc obter um erro, pois a referncia invlida. Essa referncia s ser vlida quando chamada do prprio formulrio e no de outros lugares. por isso que no cdigo dos mtodos e eventos do nosso formulrio est cheio de referncia usando thisform. Por exemplo:

Neste caso o cdigo est dizendo para executar o mtodo CoordenaNavegacao, passando o parmetro PRIMEIRO no formulrio em questo. Outra palavra usada para fazer referncias relativas THIS. This uma referncia para o objeto em questo. Ou seja, quando estamos codificando dentro de um determinado objeto e queremos nos referir a ele prprio ento usamos this. Mais uma palavra para referncias relativas: PARENT. Imagine que inserimos um objeto container e nele colocamos alguns outros objetos como por exemplo botes de comando. De repente estamos codificando o evento click do objeto bntBotao1 e precisamos disparar o evento click do bntBotao2. Seria algo mais ou menos assim: This.Parent.bntBotao2.Click Aqui estou dizendo assim, acesse o Parent (pai, recipiente, container) no qual estou inserido e ento dispare o Click de bntBotao2. Entendeu a flexibilidade? A princpio parece complicado, mas medida que voc for codificar perceber que na prtica mais simples, principalmente se estiver utilizando o recurso de IntelliSense do Visual FoxPro. No final deste documento voc encontra um guia de referncia para os comandos e funes utilizados at o momento.
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 58 de 103 REAPROVEITANDO O CDIGO J ESCRITO NO FORMULRIO USURIOS Uma tcnica j muito conhecida de programadores a de reaproveitar cdigo escrito para uma determinada rotina em outra. Para isso linguagens estruturadas oferecem as chamadas funes e as bibliotecas de funes. Em OOP, temos um conceito diferente de reaproveitamento de cdigo. Definimos modelos (templates) que chamamos de classes. A partir de uma classe podemos instanciar uma infinidade de objetos com as mesmas caractersticas. Apesar do conceito ser um pouco vago, voc entender na prtica o que estou tentando dizer. At o momento definimos um formulrio chamado usuarios.scx. Neste formulrio adicionamos vrios controles do tipo Boto de Comando e dentro de cada boto inserimos um cdigo a ser executado quando do seu pressionamento. Se fssemos usar os mtodos da linguagem tradicional o que faramos seria copiar esses controles para um novo formulrio e estaria tudo certo. A voc pergunta: Funciona dessa forma? Funciona. Ento por que no fazer assim? Porque alm de voc ter o trabalho de copiar tudo cada vez para cada formulrio novo, se de repente voc encontrasse um erro no cdigo de algum desses botes, voc teria que sair corrigindo o erro em cada formulrio, sem contar que o tamanho do seu executvel aumentaria bastante pois o cdigo estaria duplicado em cada formulrio. Ento o que devo fazer? Voc deve criar um modelo/template ou simplesmente uma classe. Antes que voc pergunte como definir uma classe, vou lhe explicar. CRIANDO UMA CLASSE DE FORMULRIO A PARTIR DO FORMULRIO USUARIOS.SCX Vamos criar uma classe a partir do formulrio usuarios.scx porque todo o cdigo necessrio para o seu funcionamento como os mtodos de coordenao de controles, botes, navegao j esto ali agregados (encapsulados) no formulrio e todos os botes j esto prontos. Evidentemente que algumas coisas no sero reaproveitadas como por exemplo a tabela de usurios e os campos. Criando a Classe:
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 59 de 103 1. Abra o formulrio de usurios para edio, clicando no boto Modify do gerenciador de projetos. 2. Certifique-se de que nenhum objeto do formulrio esteja selecionado e depois clique no menu File, e depois em Save As Class...

Figura 46 Gravando um formulrio como Classe 3. Clique no boto OK. A partir desse momento uma nova biblioteca de classes foi criada com o nome formulrios.vcx. Dentro dessa classe est a definio da classe FormularioPadrao. Adequando a Classe FormularioPadrao: Agora que nossa classe est criada, necessrio que faamos as adequaes necessrias para que possamos reaproveit-la (herana). 1. No Gerenciador de Projetos, clique sobre a aba Classes. 2. Caso a classe ainda no aparea na lista de classes, use o boto Add... para adicionla.

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 60 de 103

Figura 47 Adicionando biblioteca de classes 3. Escolha a biblioteca formulrios.vcx e clique em OK. 4. A nova classe aparece na janela do gerenciador de projetos:

Figura 48 Classe FormularioPadrao no Gerenciador de Projetos) 5. Clique sobre a classe FormularioPadrao e clique em Modify.

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 61 de 103

Figura 49 Class Designer editando a classe FormularioPadrao 6. Como voc pode notar na figura 49 o formulrio de usurios est ali completinho, aparentemente. O que muda que este formulrio perdeu o ambiente de dados. Simplesmente desaparece o vnculo quando transformamos um formulrio em classe. Isso faz sentido j que cada formulrio instanciado a partir dessa classe ter um ambiente de dados diferente. Agora precisamos redefinir algumas propriedades como: 7. Remova o ttulo do formulrio 8. Limpe o contedo da propriedade PosicionarPrimeiroCampo 9. Remova os campos e todos os demais objetos label do cadastro de usurios 10. Aumente um pouco o tamanho do formulrio 11. Reposicione os botes de controle. 12. Remova o cdigo do mtodo CriticarDados(), mantendo o mtodo vazio. 13. Salve a classe e feche o Class Designer. Agora nossa classe j est pronta para ser reaproveitada. DEFININDO UMA CLASSE MODELO PARA CRIAO DE FORMULRIOS A forma mais rpida e mais fcil de criarmos um formulrio interativamente baseado em uma classe visual definindo qual a classe da qual o formulrio ir se originar. Podemos fazer isso acessando a opo Options do menu Tools. Ao acessar a opo Options do menu Tools, clique na aba Forms. O resultado ser algo como o apresentado na figura 50.

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 62 de 103

Figura 50 Dilogo Options, definindo opes de formulrios Observe no destaque da figura. Esse grupo, Template Classes serve para definirmos qual ser a classe que servir de modelo para nossos formulrios. Marque o CheckBox Form. Aparecer um novo dilogo permitindo-nos escolher qual ser a biblioteca e a classe utilizada:

Figura 51 Escolhendo a classe que servir de modelo para os novos formulrios Escolha a biblioteca formularios.vcx e do lado direito do dilogo Form Template escolha a classe formulariopadrao. Clique OK. Voc estar novamente no dilogo Options, e sua aparncia deve ser a seguinte:
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 63 de 103

Figura 52 Dilogo Options aps a definio da classe de formulrio. Note agora que o TextBox Form foi preenchido com o nome da classe seguido pelo caminho e nome da biblioteca de formulrios. Clique no boto Set As Default. Agora j podemos criar nossos formulrios baseados nesta classe. Clique em OK. CRIANDO UM FORMULRIO BASEADO NA CLASSE MODELO Se voc como eu, provavelmente no conseguiu esperar at este ponto do texto e provavelmente j tenha criado os formulrios de clientes e fornecedores. Muito bem. Parabns! Esse tipo de iniciativa uma tima qualidade de um desenvolvedor. No se deve ficar esperando pelos outros, deve-se correr atrs. Embora aprecie sua iniciativa, pode ser que o caminho escolhido no seja o mais produtivo tanto em tempo de desenvolvimento como em futuras manutenes ao sistema. Vamos agora criar os formulrios do nosso sistema baseados na classe FormularioPadrao que definimos como Class Template. Procedamos conforme os prximos passos para a criao do formulrio de clientes: 1. Clique na aba Documents do gerenciador de projetos. 2. Clique em Forms e depois no boto New...
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 64 de 103

Figura 53 Dilogo New Form 3. No dilogo New Form, clique no boto New Form. 4. Agora a Form Designer aparecer como mostra a figura 54.

Figura 54 Novo formulrio baseado na classe FormularioPadrao 5. Observe que o formulrio FormDoc1 (assim chamado porque ainda no foi salvo) possui exatamente as mesmas caractersticas da classe FormularioPadrao. Quando criamos um objeto baseado nas especificaes de uma classe, dizemos que estamos criando a instncia da classe no objeto. Portanto, o formulrio FormDoc1 uma instncia da classe FormularioPadrao.
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 65 de 103 Agora que temos nosso formulrio disponvel para ser alterado, faremos as seguintes modificaes para que o mesmo se transforme em nosso formulrio de clientes: a) Adicionar a tabela de clientes ao Data Environment (ambiente de dados) do formulrio; b) Posicionar os campos e Labels (texto descritivo dos campos) no formulrio; c) Adicionar o cdigo de validao no mtodo CriticarDados(); d) Configurar a propriedade PrimeiroCampoFoco com o comando de posicionamento de foco no primeiro campo; e) Definir o ttulo do formulrio; f) Definir o nome (name) do formulrio. Vamos ento modificar nosso formulrio seguindo a ordem proposta acima. 1. Clique com o boto direito do mouse sobre uma rea livre do formulrio e escolha Data Environment.

Figura 55 Adicionando a tabela de clientes ao Data Environment 2. Selecione a tabela de clientes e clique no boto Add. Clique no boto Close. 3. Selecione os campos da tabela de clientes. Clique com o boto direito sobre os campos selecionados e arraste-os para a rea do formulrio. Quando aparecer o menu de contexto, escolha Create Multiple Controls Here. O Resultado deve ser o apresentado a seguir.

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 66 de 103

Figura 56 Arrastando os campos da tabela para a rea do formulrio 4. Feche a janela do Data Environment. 5. Agora vamos adicionar o cdigo de validao dos campos no mtodo CriticarDados(). Clique sobre uma rea livre do formulrio e depois procure na janela de propriedades na aba Methods o mtodo CriticarDados. D dois cliques sobre o mesmo e digite o cdigo de validao. Voc pode usar como base o cdigo a seguir:

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 67 de 103

6. claro que voc pode adicionar e remover cdigo conforme a sua necessidade, mas no se esquea de sempre retornar os valores Falso (.F.) ou Verdadeiro (.T.) quando a condio no obedecer as regras ou quando for o contrrio disso, respectivamente. 7. Configure a propriedade PrimeiroCampoFoco com o valor Thisform.txtNome_cliente.SetFocus. Caso tenha mudado o nome do objeto no banco de dados, deve-se atentar para a escrita correta do nome do controle nesse ponto, seno seu formulrio poder apresentar erros em tempo de execuo. 8. Agora clique na aba Layout da janela de propriedades e mude a propriedade Caption para Cadastro de Clientes. 9. Clique na aba Other e mude o valor da propriedade Name para clientes. 10. Agora clique no boto Run (!) e veja o resultado:

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 68 de 103

Figura 57 Formulrio de Cadastro de Clientes Pronto! Seu formulrio est pronto para ser usado. Difcil no ? Agora sim, voc pode criar todos os formulrios de cadastro, inclusive recrie o formulrio de usurios para que todos fiquem baseados na mesma classe.

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 69 de 103

ALGUMAS DEFINIES IMPORTANTES MTODO Um mtodo uma ao que um objeto capaz de executar. Um objeto pode ter inmeros mtodos, mas pode tambm no ter nenhum. Em termos gerais um mtodo comparado a uma funo, porm est encapsulado dentro de um objeto. Um mtodo representado por um cone . PROPRIEDADE um atributo de um controle, objeto, campo de banco de dados e usado para definir as caractersticas ou os aspectos do comportamento de um objeto. Na prtica uma propriedade como uma varivel, mas sua definio bem mais ampla que isso. Uma propriedade pode ser reconhecida pelo cone . EVENTO uma ao que ocorre no ambiente de execuo e que reconhecido por um objeto permitindo que seja programada uma reao. Eventos podem ocorrer por diversos motivos, por exemplo um clique de mouse, a entrada ou perda de foco de um TextBox ou qualquer outro controle. Existem vrios eventos para cada tipo de objeto. Para identificar um evento, note o tipo de cone que representa um evento . CLASSE Uma classe um molde (modelo) que define todas as caractersticas e comportamentos de um objeto. OBJETO ENCAPSULAO

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 70 de 103 GUIA DE REFERNCIA DE COMANDOS E FUNES COMANDO / FUNO & DESCRIO / FINALIDADE Executa substituio de macro. Sintaxe & NomeVar[.cExpresso] Argumentos & NomeVar Especifica o nome da varivel ou do elemento de matriz ao qual ser feita referncia na substituio de macro. No inclua o prefixo M. que diferencia variveis de campos. Essa incluso provocar um erro de sintaxe. A macro no deve exceder o tamanho mximo de instruo permitido no Visual FoxPro. Uma varivel no pode fazer referncia a si mesma de forma recursiva durante a substituio de macro. Por exemplo, o comando a seguir gerar uma mensagem de erro: STORE '&gcX' TO gcX ? &gcX As instrues de substituio de macro que aparecem em DO WHILE, FOR e SCAN so avaliadas somente no incio do loop, no sendo reavaliadas em iteraes subseqentes. Qualquer alterao feita na varivel ou no elemento de matriz que ocorra dentro do loop no ser reconhecida. cExpresso O delimitador de ponto opcional (.) e .cExpresso so utilizados para incluir caracteres adicionais em uma macro. cExpresso includa na macro com . cExpresso tambm pode ser uma macro. Se cExpresso for um nome de propriedade, inclua um ponto extra (cExpresso..NomePropriedade). Comentrios A substituio de macro trata o contedo de uma varivel ou de um elemento de matriz como um literal de seqncia de caracteres. Quando um E comercial (&) preceder uma varivel do tipo Caractere ou um elemento de matriz, o contedo da varivel ou do
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 71 de 103 elemento substituir a referncia macro. possvel utilizar a substituio de macro em qualquer comando ou funo que aceite um literal de seqncia de caracteres. Dica: Sempre que possvel, utilize uma expresso de nome em vez de uma substituio de macro. Uma expresso de nome opera como a substituio de macro. No entanto, uma expresso de nome limita-se a passar seqncias de caracteres como nomes. Utilize uma expresso de nome para acelerar de forma significativa o processamento caso um comando ou funo aceite um nome (um nome de arquivo, nome de janela, nome de menu e assim por diante). Embora os comandos abaixo sejam aceitveis: STORE 'cliente' TO gcTableName STORE 'empresa' TO gcTagName USE &gcTableName ORDER &gcTagName substitua-os por uma expresso de nome: USE (gcTableName) ORDER (gcTagName) A substituio de macro til para a substituio de uma palavrachave em um comando. No exemplo a seguir, a definio TALK salva em uma varivel para que a varivel possa ser posteriormente restaurada no programa. A definio original TALK restaurada com a substituio de macro. AERROR() Cria uma matriz de varivel que contm informaes sobre o erro mais recente do ODBC, OLE ou Visual FoxPro. Sintaxe AERROR(NomeMatriz) Tipos de retorno Numrico Argumentos NomeMatriz Especifica o nome da matriz criada por AERROR( ). Comentrios A funo AERROR( ) cria uma matriz com seis colunas e retorna o
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 72 de 103 nmero de linhas da matriz. A tabela a seguir descreve o contedo de cada elemento quando ocorre um erro do Visual FoxPro. Na ocorrncia de um erro, a matriz conter uma linha. Nmero do elemento 1 Descrio Numrico. Contm o nmero do erro. Idntico ao valor retornado por ERROR( ). Caractere. O texto da mensagem de erro. Idntico ao valor retornado por MESSAGE( ). O valor nulo. No entanto, se o erro possuir um parmetro de erro adicional, ir conter o texto do parmetro de erro. Idntico ao valor retornado por SYS(2018). O valor nulo. No entanto, quando apropriado, contm o nmero da rea de trabalho em que o erro ocorreu. O valor nulo. No entanto, se um disparador falhar (erro 1539), ir conter um dos valores numricos abaixo: 1 Erro no Disparador de insero. 2 Erro no Disparador de atualizao. 3 Erro no Disparador de excluso. O valor nulo. O valor nulo.

6 7

A tabela a seguir descreve o contedo de cada elemento quando ocorrem os erros de OLE nmero 1427 ou 1429. Nestes casos, a matriz contm uma linha. Nmero do elemento 1 2 3 Descrio Numrico. Contm 1427 ou 1429. Caractere. O texto da mensagem de erro do Visual FoxPro. Caractere. O texto da mensagem de erro
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 73 de 103 de OL. 4 5 Caractere. O nome do aplicativo (Microsoft Excel, por exemplo). O valor nulo ou Caractere. Contm o nome do arquivo de Ajuda do aplicativo em que podem ser encontradas maiores informaes sobre o erro, se as informaes estiverem disponveis no aplicativo; caso contrrio, contm o valor nulo. O valor nulo ou Caractere. Contm o identificador de contexto da Ajuda para o tpico apropriado, se as informaes estiverem disponveis no aplicativo; caso contrrio, contm o valor nulo. Numrico. Um nmero de exceo OLE 2.0.

A tabela a seguir descreve o contedo de cada elemento quando ocorre um erro do ODBC de nmero 1526. Neste caso, a matriz contm duas ou mais linhas; uma linha para cada erro do ODBC. Nmero do elemento 1 2 3 4 5 6 7 ALLTRIM() Descrio Numrico. Contm 1526. Caractere. O texto da mensagem de erro. Caractere. O texto da mensagem de erro do ODBC. Caractere. O estado atual do ODBC SQL. Numrico. O nmero do erro da fonte de dados do ODBC. Numrico. O identificador de conexo do ODBC. O valor nulo.

Remove os espaos em branco do incio e do final da expresso de caracteres especificada e retorna a expresso com os espaos removidos como uma seqncia de caracteres.
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 74 de 103 Sintaxe ALLTRIM(cExpresso) Tipos de retorno Caractere Argumentos cExpresso Especifica a expresso de caracteres da qual sero retirados os espaos em branco iniciais e finais. Comentrios ALLTRIM( ) pode ser utilizado para assegurar que os espaos em branco sero removidos dos dados inseridos pelo usurio. APPEND BLANK Adiciona um ou mais registros novos ao fim de uma tabela. Sintaxe APPEND [BLANK] [IN nreaTrabalho | cAliasTabela] [NOMENU] Argumentos BLANK Adiciona um registro em branco ao fim da tabela atual. O Visual FoxPro no abre uma janela de edio quando voc emite APPEND BLANK. Voc pode editar o novo registro com BROWSE, CHANGE ou EDIT. IN nreaTrabalho Especifica a rea de trabalho da tabela na qual um novo registro ser includo. IN cAliasTabela Especifica o alias da tabela na qual um novo registro ser includo. Se voc omitir nreaTrabalho e cAliasTabela, um novo registro ser includo na tabela na rea de trabalho selecionada no momento. Se voc emitir APPEND, um registro em branco ser adicionado tabela especificada com nreaTrabalho ou cAliasTabela e a tabela ser automaticamente selecionada. Se voc emitir APPEND BLANK, um registro em branco ser adicionado tabela especificada com nreaTrabalho ou cAliasTabela e a tabela no ser
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 75 de 103 selecionada. NOMENU Especifica que o ttulo do menu Tabela ser removido da barra de menus do sistema, evitando alteraes no formato da janela de edio. Comentrios Quando voc emite APPEND ou APPEND BLANK e uma tabela no est aberta na rea de trabalho selecionada no momento, a caixa de dilogo Abrir exibida, de forma que voc possa escolher uma tabela na qual inclua registros. APPEND abre uma janela de edio para que voc possa fornecer dados a um ou mais novos registros. Quando voc adiciona um novo registro, o Visual FoxPro atualiza todos os ndices abertos. BOF() Determina se o ponteiro do registro est posicionado no incio de uma tabela. Sintaxe BOF([nreaTrabalho | cAliasTabela]) Tipos de retorno Lgico Argumentos nreaTrabalho Especifica o nmero da rea de trabalho para uma tabela aberta em uma outra rea de trabalho. cAliasTabela Especifica o alias de uma tabela aberta em uma outra rea de trabalho. Caso a tabela em que voc deseja testar a condio de incio do arquivo esteja aberta em uma rea de trabalho diferente da selecionada no momento, utilize estes argumentos opcionais para especificar o nmero da rea de trabalho ou o alias da tabela. Caso a tabela no esteja aberta na rea de trabalho especificada, BOF( ) retornar falso (.F.). Comentrios Utilize BOF( ) para testar uma condio de incio do arquivo para uma tabela. BOF( ) retornar verdadeiro (.T.) se voc tiver tentado mover o ponteiro do registro para uma posio anterior ao primeiro registro da tabela.
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 76 de 103 CANCEL Finaliza a execuo do arquivo de programa atual do Visual FoxPro. Sintaxe CANCEL Comentrios O controle retornar janela Comando quando o Visual FoxPro estiver sendo utilizado de forma interativa. Se um aplicativo distribudo em tempo de execuo estiver sendo executado, CANCEL terminar o aplicativo e o controle retorna ao Windows. Se um programa estiver sendo executado no Visual FoxPro na hora da criao, CANCEL terminar o programa e o controle retorna janela Comando. A execuo de CANCEL libera todas as variveis privadas. CLEAR EVENTS Interrompe o processamento de eventos iniciado com READ EVENTS. Quando CLEAR EVENTS for executado, a execuo do programa continuar na linha do programa imediatamente aps READ EVENTS. Marca registros para excluso. Sintaxe DELETE [Escopo] [FOR lExpresso1] [WHILE lExpresso2] [IN nreaTrabalho | cAliasTabela] [NOOPTIMIZE] Argumentos Escopo Especifica um intervalo de registros a serem marcados para excluso. As clusulas de escopo so: ALL, NEXT nRegistros, RECORD nNmeroRegistro e REST. Para obter maiores informaes sobre as clusulas de escopo, consulte o tpico Clusulas de escopo. O escopo padro para DELETE o registro atual (NEXT 1). FOR lExpresso1 Especifica uma condio atravs da qual somente os registros que satisfazem condio lgica lExpresso1 so marcados para excluso. Rushmore otimizar uma consulta especificada com

DELETE

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 77 de 103 DELETE ... FOR se lExpresso1 for uma expresso otimizvel e a tabela for indexada em DELETED( ). Para obter um melhor desempenho, utilize uma expresso otimizvel na clusula FOR. Para obter informaes sobre expresses otimizveis Rushmore, consulte SET OPTIMIZEe Compreendendo a tecnologia Rushmore, no captulo 15, Otimizando aplicativos, no Guia do Desenvolvedor. WHILE lExpresso2 Especifica uma condio atravs da qual os registros sero marcados para serem excludos quando lExpresso2 resultar em verdadeiro (.T.). IN nreaTrabalho Especifica a rea de trabalho da tabela onde os registros so marcados para excluso. IN cAliasTabela Especifica o alias da tabela onde os registros so marcados para excluso. Se voc omitir nreaTrabalho e cAliasTabela, os registros sero marcados para excluso na tabela da rea de trabalho atualmente selecionada. NOOPTIMIZE Desativa a otimizao de Rushmore de DELETE. Comentrios Os registros marcados para excluso no so removidos fisicamente da tabela at que PACK seja emitido. Os registros marcados para excluso podem ser reintegrados (desmarcados) com RECALL. DO CASE ... CASE ... ENDCASE Sintaxe DO CASE CASE lExpresso1 Comandos [CASE lExpresso2 Comandos ... CASE lExpressoN Comandos] [OTHERWISE Comandos] ENDCASE
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Executa o primeiro conjunto de comandos cuja expresso condicional resulta em verdadeiro (.T.).

Visual FoxPro 8.0 O Caminho das Pedras Pgina 78 de 103 Argumentos CASE lExpresso1 Comandos ... Quando a primeira expresso CASE verdadeira (.T.) localizada, o conjunto de comandos que a acompanha executado. A execuo do conjunto de comandos continua at que a prxima clusula CASE ou ENDCASE seja localizada. A execuo retomada, ento, pelo primeiro comando seguinte a ENDCASE. Se uma expresso CASE for falsa (.F.), o conjunto de comandos seguintes a ela at a prxima clusula CASE ser ignorado. Apenas um conjunto de comandos executado. o primeiro conjunto de comandos cuja expresso CASE resulta em verdadeiro (.T.). Qualquer expresso CASE verdadeira (.T.) posterior ser ignorada. OTHERWISE Comandos Se todas as expresses CASE resultarem em falso (.F.), OTHERWISE determinar se um conjunto de comandos adicionais ser executado.

Se voc incluir OTHERWISE, os comandos que acompanham OTHERWISE sero executados e a execuo saltar para o primeiro comando que acompanha ENDCASE. Se voc omitir OTHERWISE, a execuo saltar para o primeiro comando que acompanha ENDCASE.

Comentrios DO CASE utilizado para executar um conjunto de comandos do Visual FoxPro, baseado no valor de uma expresso lgica. Quando DO CASE executado, as expresses lgicas sucessivas so avaliadas; os valores das expresses determinam o conjunto de comandos que ser executado. Podem ser colocados comentrios na mesma linha, aps DO CASE e ENDCASE. Os comentrios so ignorados durante a compilao e execuo do programa. EMPTY() Determina se uma expresso retorna um valor vazio. Sintaxe EMPTY(eExpresso)
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 79 de 103 Tipos de Retorno Lgico Argumentos eExpresso EMPTY( ). Especifica a expresso retornada pela funo

A expresso includa pode ser de caracteres, data, numrica ou lgica, bem como o nome de um campo Memo ou geral de uma tabela aberta. EMPTY( ) retorna verdadeiro (.T.) quando as expresses retornam um dos valores a seguir:

Tipo de expresso Caractere

Retorna este valor Seqncia vazia, espaos, tabulaes, retornos de carro, alimentaes de linha ou qualquer combinao dos mesmos. 0 0 0 0 0 Vazio (e.g. CTOD('')) Vazio (e.g. CTOT('')) Falso (.F.) Vazio (sem contedo) Vazio (sem objeto OLE) Vazio (nenhuma figura)

Numrica Moeda Flutuante Nmero inteiro Dupla Data DataHora Lgica Memo Geral Figura

EMPTY( ) no pode ser utilizada para determinar se uma referncia a um objeto de varivel de memria vazia. Por exemplo, uma varivel de memria pode conter uma referncia de objeto para um formulrio. Se o formulrio for fechado a partir da caixa de menu Controle do formulrio ou com CLEAR WINDOWS, a varivel de
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 80 de 103 memria conter o valor nulo. O exemplo de programa a seguir mostra como utilizar TYPE( ) e ISNULL( ) para determinar se uma referncia a um objeto de varivel de memria vlida.
goMyForm = CREATEOBJECT('Form') WAIT WINDOW IIF(TYPE('goMyForm') = 'O' AND !ISNULL(goMyForm), ; 'goMyForm has valid object reference',; 'goMyForm does not have valid object reference')

Comentrios EMPTY( ) retornar verdadeiro (.T.) se a expresso eExpresso retornar um valor vazio; caso contrrio, EMPTY( ) retornar falso (.F.). EOF() Determina se o ponteiro do registro est posicionado aps o ltimo registro na tabela atual ou especificada. Sintaxe EOF([nreaTrabalho | cAliasTabela]) Tipos de Retorno Lgico Argumentos nreaTrabalho Especifica o nmero da rea de trabalho da tabela. cAliasTabela Especifica o alias da tabela. EOF( ) retornar falso (.F.) se uma tabela no estiver aberta na rea de trabalho que voc especificou. Se voc no especificar uma rea de trabalho ou alias, a tabela que estiver aberta na rea de trabalho selecionada no momento ser testada para o final da condio de tabela. Comentrios EOF( ) retornar verdadeiro (.T.) se o ponteiro do registro alcanar o final do arquivo de tabela (EOF). O final da tabela alcanado quando o ponteiro do registro passa pelo ltimo registro da tabela. Por exemplo, quando os comandos FIND, LOCATE ou SEEK no tm xito, o Visual FoxPro move o ponteiro do registro para depois
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 81 de 103 do ltimo registro e EOF( ) retorna verdadeiro (.T.). EOF( ) retornar falso (.F.) se o ponteiro do registro no estiver no final da tabela. EXTERNAL Informa ao Gerenciador de projetos sobre uma referncia indefinida. Sintaxe EXTERNAL FILE ListaArquivos | ARRAY ListaMatrizes | CLASS | FORM | LABEL | LIBRARY | MENU | PROCEDURE | QUERY | REPORT | SCREEN | TABLE Argumentos FILE ListaArquivos Especifica que o arquivo includo em uma referncia indireta ao arquivo ou substituio de macro um arquivo autnomo, como um arquivo de texto, arquivo de bitmap .BMP e assim por diante. ListaArquivos pode conter uma lista de nomes de arquivos separados por vrgulas. ARRAY ListaMatrizes Quando uma matriz criada em um programa e, em seguida, utilizada em um programa de baixo nvel, inclua ARRAY com o nome da matriz no programa de baixo nvel. ListaMatrizes pode conter uma lista de nomes de matriz separados por vrgulas. No exemplo a seguir, o primeiro programa cria uma matriz denominada gaInvoice. A matriz inicializada e chamado um programa de baixo nvel denominado dispinvo. dispinvo exibe o contedo da matriz criada no programa de alto nvel. O comando EXTERNAL ARRAY GAINVOICE includo para avisar o Gerenciador de projetos.
DIMENSION gaInvoice(4) STORE 'Pago' TO gaInvoice DO dispinvo *** Programa dispinvo *** PROCEDURE dispinvo EXTERNAL ARRAY gaInvoice ? gaInvoice(1) ? gaInvoice(2) ? gaInvoice(3) ? gaInvoice(4) RETURN *** Final do programa dispinvo ***

Quando uma matriz passada para uma funo ou procedimento definido pelo usurio, a matriz correspondente na funo ou procedimento definido pelo usurio deve ser identificada para o Gerenciador de projetos. Inclua a opo ARRAY com o nome da matriz includo na instruo PARAMETER.
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 82 de 103


DIMENSION gaArrayOne(2) EXTERNAL ARRAY gaArrayTwo utilizada na UDF SET TALK OFF STORE 10 TO gaArrayOne(1) STORE 2 TO gaArrayOne(2) = ADDTWO(@gaArrayOne) referncia a uma UDF FUNCTION ADDTWO PARAMETER gaArrayTwo CLEAR gaArrayTwo(1) = gaArrayTwo(1) gaArrayTwo(2) = gaArrayTwo(2) ? gaArrayTwo(1) ? gaArrayTwo(2) && Cria uma matriz && Nome da matriz

&& Passa a matriz por

+ 2 + 2

CLASS Especifica que o arquivo includo em uma referncia indireta ao arquivo ou substituio de macro uma biblioteca de classes visuais.
EXTERNAL CLASS myvclass && CLASS myvclass deve existir STORE 'myvclass' TO gcClassFile MODIFY CLASS (gcClassFile)

FORM Se um arquivo de definio de Form for includo em uma referncia indireta ao arquivo ou substituio de macro, inclua FORM e o nome do arquivo de Form. FORM idntico a SCREEN.
EXTERNAL FORM dataentr && FORM dataentr deve existir STORE 'dataentr' TO gcFormFile DO FORM (gcFormFile)

LABEL Especifica que o arquivo includo em uma referncia indireta ao arquivo ou substituio de macro um arquivo de definio de rtulo.
EXTERNAL LABEL Maillabl && LABEL FORM Maillabl deve existir STORE 'Maillabl' TO gcLabelFile LABEL FORM (gcLabelFile) PREVIEW

LIBRARY Inclua LIBRARY quando um arquivo de biblioteca for indicado por referncia indireta ao arquivo ou substituio de macro em SET LIBRARY.
EXTERNAL LIBRARY regress && LIBRARY regress deve existir STORE 'regress' TO gcStatFunc SET LIBRARY TO (gcStatFunc)

MENU Se um arquivo de definio de menu for includo em uma referncia indireta ao arquivo ou substituio de macro, inclua MENU e o nome do arquivo de menu.
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 83 de 103


EXTERNAL MENU pickfile && MENU pickfile deve existir STORE 'pickfile' TO gcSysMenPad MODIFY MENU (gcSysMenPad)

PROCEDURE Identifica um procedimento externo ou funo definida pelo usurio.


EXTERNAL PROCEDURE delblank && PROCEDURE delblank deve existir STORE 'delblank' TO gcTrimBlanks DO (gcTrimBlanks) WITH 'A B C D E'

QUERY Especifica que o arquivo includo em uma referncia indireta ao arquivo ou substituio de macro um arquivo de consulta.
EXTERNAL QUERY sales && QUERY sales deve existir STORE 'sales.qpr' TO gcSalesFile DO (gcSalesFile)

REPORT Especifica que o arquivo includo em uma referncia indireta ao arquivo ou substituio de macro um arquivo de definio de relatrio.
EXTERNAL REPORT overdue && REPORT overdue deve existir STORE 'overdue' TO gcReportFile REPORT FORM (gcReportFile) PREVIEW

SCREEN Se um arquivo de definio de formulrio estiver includo em uma referncia indireta ao arquivo ou substituio de macro, inclua SCREEN e o nome do arquivo de tela. SCREEN idntico a FORM.
EXTERNAL SCREEN dataentr && SCREEN dataentr deve existir STORE 'dataentr' TO gcScreenFile MODIFY SCREEN (gcScreenFile)

TABLE Especifica que o arquivo includo em uma referncia indireta ao arquivo ou substituio de macro uma tabela do Visual FoxPro.
EXTERNAL TABLE customer && Table customer deve existir STORE 'customer' TO gcMyTable USE (gcMyTable)

Comentrios Utilize EXTERNAL para incluir arquivos e resolver referncias indefinidas em um projeto criado pelo Gerenciador de projetos. EXTERNAL utilizado somente pelo Gerenciador de projetos e
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 84 de 103 ignorado durante a execuo do programa. Arquivos cujos nomes foram especificados com EXTERNAL so includos em um projeto pelo Gerenciador de projetos. preciso incluir CLASS, FILE, FORM, LABEL, LIBRARY, MENU, PROCEDURE, QUERY, REPORT, SCREEN ou TABLE antes dos nomes de arquivos ou de um conjunto de nomes de arquivos separados com vrgulas para informar ao Gerenciador de projetos o tipo dos arquivos a serem includos no projeto. O Gerenciador de projetos tambm precisa ser alertado quanto a nomes de arquivos contidos em uma expresso de nome ou substituio de macro. Isso garante que todos os arquivos necessrios estejam includos em um projeto quando este criado. Tambm necessrio informar as matrizes criadas em outro procedimento ou funo definida pelo usurio. Para obter maiores informaes sobre expresses de nome e substituio de macro, consulte o comando &. Sempre que possvel, utilize uma expresso de nome em vez de uma substituio de macro para melhorar o desempenho. GO Move o ponteiro do registro para o nmero de registro especificado. Sintaxe
GO [RECORD] nNmeroRegistro [IN nreaTrabalho | IN cAliasTabela] Ou GO TOP | BOTTOM [IN nreaTrabalho | IN cAliasTabela] Ou GOTO [RECORD] nNmeroRegistro [IN nreaTrabalho | IN cAliasTabela] Ou GOTO TOP | BOTTOM [IN nreaTrabalho | IN cAliasTabela]

Argumentos RECORD nNmeroRegistro Especifica o nmero do registro fsico para o qual o ponteiro do registro deve ser movido. Voc pode omitir GO ou GOTO totalmente e especificar apenas o nmero do registro. Caso especifique apenas o nmero do registro, voc poder mover o ponteiro do registro somente dentro da rea de trabalho atual. IN nreaTrabalho Especifica a rea de trabalho da tabela na qual o ponteiro do registro movido.
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 85 de 103 IN cAliasTabela Especifica o alias da tabela na qual o ponteiro do registro movido.

TOP Posiciona o ponteiro do registro no primeiro registro na tabela. Caso a tabela esteja utilizando um ndice ascendente, o primeiro registro ser o que apresenta o menor valor-chave. Se o ndice estiver em ordem descendente, o primeiro registro ser o que apresenta o maior valor-chave. BOTTOM Posiciona o ponteiro do registro no ltimo registro da tabela. Caso a tabela esteja utilizando um ndice ascendente, o ltimo registro ser o que apresenta o maior valor-chave. Se o ndice estiver em ordem descendente, o ltimo registro ser o que apresenta o menor valor-chave. Comentrios GO e GOTO podem ser utilizados alternativamente. Estes comandos operam na rea de trabalho atual da tabela, a menos que voc especifique outra rea de trabalho com a clusula IN. IF ... ENDIF ELSE Executa condicionalmente um conjunto de comandos baseados no valor de uma expresso lgica. Sintaxe IF lExpresso [THEN] Comandos [ELSE Comandos] ENDIF Argumentos lExpresso Especifica a expresso lgica avaliada. Caso lExpresso resulte em verdadeiro (.T.), todos os comandos depois de IF ou THEN e antes de ELSE ou ENDIF (aquele que ocorrer primeiro) sero executados. Se lExpresso for falso (.F.) e ELSE for includo, todos os comandos depois de ELSE e antes de ENDIF sero executados. Se lExpresso for falso (.F.) e ELSE no for includo, todos os comandos entre IF e ENDIF sero ignorados. Neste caso, a execuo do programa continuar com o primeiro comando
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 86 de 103 depois de ENDIF. Comentrios possvel aninhar um bloco IF... ENDIF dentro de outro bloco IF... ENDIF. Os comentrios precedidos por && podem ser colocados na mesma linha depois de IF, THEN, ELSE e ENDIF. Esses comentrios so ignorados durante a compilao e a execuo do programa. ISRELOCKED() Retorna o status de bloqueio do registro. Sintaxe ISRLOCKED([nNmeroRegistro, [nreaTrabalho | cAliasTabela]]) Tipos de retorno Lgico Argumentos nNmeroRegistro Especifica o nmero do registro para o qual o status do bloqueio retornado. Se nNmeroRegistro omitido, o status de bloqueio do registro retornado para o registro atual. nreaTrabalho Especifica um nmero de rea de trabalho de uma tabela para a qual o status de bloqueio de registro retornado. Se for omitido cAliasTabela e nreaTrabalho, o status de bloqueio do registro retornado para a tabela aberta na rea de trabalho atual. cAliasTabela Especifica o alias da tabela para a qual o status de bloqueio do registro retornado. Comentrios ISRLOCKED( ) retorna verdadeiro (.T.) se o registro estiver bloqueado, caso contrrio ser retornado falso (.F.). LOCAL Cria variveis e matrizes de variveis locais. Sintaxe LOCAL ListaVar Ou LOCAL [ARRAY] NomeMatriz1(nLinhas1 [, nColunas1]) [, NomeMatriz2(nLinhas2 [, nColunas2])] ...
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 87 de 103 Argumentos ListaVar Especifica uma ou mais variveis locais a serem criadas. [ARRAY] NomeMatriz1 (nLinhas1 [, nColunas1]) [, NomeMatriz2 (nLinhas2 [, nColunas2])] ... Especifica uma ou mais matrizes locais a serem criadas. Consulte DIMENSION para obter uma descrio de cada argumento. Comentrios As variveis e as matrizes de variveis locais s podem ser utilizadas e modificadas dentro do procedimento ou funo em que so criadas, e no podem ser acessadas por programas de nvel mais alto ou baixo. As matrizes e variveis locais so liberadas quando concluda a execuo do procedimento ou funo que as contm. As variveis e matrizes criadas com LOCAL so inicializadas com um valor falso (.F.). Qualquer varivel de memria ou matriz que voc deseje declarar como local deve ser declarada local antes de ter um valor atribudo. O Visual FoxPro gera uma mensagem de erro quando voc atribui um valor a uma varivel ou matriz e posteriormente a declara local utilizando LOCAL. As variveis locais podem ser passadas por referncia. No abrevie LOCAL porque LOCAL e LOCATE possuem as primeiras quatro letras iguais. LPARAMETERS Atribui dados passados de um programa de chamada para matrizes ou variveis locais. Sintaxe LPARAMETERS ListaParmetros Argumentos ListaParmetros Especifica os nomes de matrizes ou variveis de memria locais aos quais os dados so atribudos. Os parmetros em ListaParmetros so separados por vrgulas. A instruo LPARAMETERS deve ter pelo menos o mesmo nmero de parmetros que a instruo DO ... WITH. Se mais variveis ou matrizes forem listadas na instruo PARAMETERS do que passadas por DO ... WITH, as variveis ou matrizes restantes sero inicializadas com um valor falso (.F.). Podem ser passados no mximo 27 parmetros.
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 88 de 103 Voc pode utilizar PARAMETERS( ) para determinar o nmero de parmetros passados para o programa, funo definida pelo usurio ou procedimento executado mais recentemente. Comentrios LPARAMETERS cria variveis ou matrizes locais em um programa, funo definida pelo usurio ou procedimento chamado. Utilize PARAMETERS para criar matrizes ou variveis particulares. LPARAMETERS dever ser a primeira instruo executvel no programa, funo definida pelo usurio ou procedimento chamado se voc passar valores, variveis ou matrizes para um deles. Como padro, DO ... WITH passa variveis e matrizes para procedimentos por referncia. Quando um valor for alterado no programa chamado, o novo valor ser repassado para a varivel ou matriz associada no programa de chamada. Se voc desejar passar uma varivel ou matriz por valor, coloque-a entre parnteses na lista de parmetros de DO ... WITH. As alteraes feitas no parmetro do programa chamado no so repassadas para o programa de chamada. Como padro, as variveis so passadas por referncia para um procedimento e por valor para uma funo definida pelo usurio. Utilize SET UDFPARMS TO REFERENCE para passar variveis para um procedimento ou funo definida pelo usurio por referncia. MESSAGEBOX() Exibe uma caixa de dilogo definida pelo usurio. Sintaxe MESSAGEBOX(cTextoMensagem cTextoBarraTtulo]]) Tipos de retorno Numrico Argumentos cTextoMensagem Especifica o texto a ser exibido na caixa de dilogo. Utilize um retorno de carro (CHR(13)) em cTextoMensagem para mover parte da mensagem para a linha seguinte na caixa de dilogo. A altura e a largura da caixa de dilogo sero aumentadas conforme o necessrio para conter cTextoMensagem.
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

[,

nTipoCaixaDilogo

[,

Visual FoxPro 8.0 O Caminho das Pedras Pgina 89 de 103 nTipoCaixaDilogo Especifica os botes e cones a serem exibidos na caixa de dilogo, o boto padro a ser selecionado quando a caixa de dilogo for exibida e as aes a serem executadas pela caixa de dilogo. Nas tabelas a seguir, os valores de botes de caixa de dilogo de 0 a 5 especificam os botes exibidos na caixa de dilogo. Os valores de cone 16, 32, 48 e 64 especificam o cone exibido na caixa de dilogo. Os valores padro 0, 256 e 512 especificam qual ser o boto padro na caixa de dilogo. O boto padro ser selecionado quando a caixa de dilogo for exibida A omisso de nTipoCaixaDilogo tem o mesmo efeito que a especificao do valor 0 para nTipoCaixaDilogo. Valor 0 1 2 3 4 5 Valor 16 32 48 64 Valor 0 256 512 Botes da caixa de dilogo Somente boto OK. Botes OK e Cancelar. Botes Anular, Repetir e Ignorar. Botes Sim, No e Cancelar. Botes Sim e No. Botes Repetir e Cancelar. cone Sinal de parada. Ponto de interrogao. Ponto de exclamao. cone de informao (i). Boto padro Primeiro boto. Segundo boto. Terceiro boto.

nTipoCaixaDilogo pode ser a soma de at trs valores um para


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

Visual FoxPro 8.0 O Caminho das Pedras Pgina 90 de 103 (2+32+256), a caixa de dilogo especificada apresentar as seguintes caractersticas: Botes Anular, Repetir e Ignorar. A caixa de mensagem exibe o cone ponto de interrogao. O segundo boto, Repetir, o padro.

cTextoBarraTtulo Especifica o texto a ser exibido na barra de ttulo da caixa de dilogo. Se voc omitir cTextoBarraTtulo, o ttulo Microsoft Visual FoxPro ser exibido na barra de ttulo. Comentrios O valor retornado por MESSAGEBOX( ) indica qual boto foi selecionado na caixa de dilogo. Se voc pressionar ESC para sair de caixas de dilogo que apresentem o boto Cancelar, ser retornado um valor igual (2) ao da seleo do boto Cancelar. Observe que a abreviao mais compacta MESSAGEB( ). para esta funo

A tabela a seguir lista os valores retornados por MESSAGEBOX( ) para cada boto.

Valor retornado 1 2 3 4 5 6 7 Objeto.Refresh

Boto OK Cancelar Anular Repetir Ignorar Sim No

Redesenha um formulrio ou um controle e atualiza todos os valores. Sintaxe [Form.]Object.Refresh


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

Visual FoxPro 8.0 O Caminho das Pedras Pgina 91 de 103 Comentrios De um modo geral, o desenho de um formulrio ou controle gerenciado automaticamente quando no est ocorrendo nenhum evento. Utilize o mtodo Refresh quando desejar atualizar o formulrio ou o controle imediatamente. Utilize Refresh para fazer com que o formulrio ou controle seja totalmente redesenhado e para atualizar o valor de um controle. O mtodo Refresh til quando voc deseja que um formulrio seja exibido enquanto um outro est sendo carregado ou quando voc deseja atualizar o contedo de um controle. Para atualizar o contedo de uma caixa de combinao ou caixa de listagem, utilize o mtodo Requery. Observao Quando um formulrio atualizado, todos os seus controles tambm so atualizados. Quando uma moldura de pgina atualizada, somente a pgina ativa atualizada. Objeto.Release() Libera um conjunto de formulrios ou um formulrio da memria. Sintaxe Object.Release Comentrios O mtodo Release til quando um conjunto de formulrios ou um formulrio criado com o comando DO FORM e no existe nenhuma varivel atravs da qual se possa fazer referncia ao conjunto de formulrios ou ao formulrio. Voc pode utilizar o conjunto de formulrios do objeto Screen para encontrar o conjunto de formulrios ou o formulrio e chamar seu mtodo Release. O mtodo Release imita o comportamento do comando RELEASE emitido dentro do conjunto de formulrios ou formulrio. Objeto.SetFocus() Atribui o foco a um controle. Sintaxe Control.SetFocus Comentrios No possvel atribuir o foco a um controle se a propriedade
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 92 de 103 Enabled ou Visible do controle estiver definida como falso ( F ) ou se o evento When do controle retornar falso (.F.). Se a propriedade Enabled ou Visible tiver sido definida como falso (.F.), voc deve primeiro defini-la como verdadeiro (.T.) antes que o controle possa receber o foco a partir do mtodo SetFocus. Depois que um controle tiver o foco, qualquer entrada fornecida pelo usurio ser direcionada para ele. ON ERROR Especifica um comando que executado quando um erro ocorre. Sintaxe ON ERROR [Comando] Argumentos Comando Especifica o comando do Visual FoxPro a ser executado. Aps a execuo do comando, a execuo do programa retomada na linha logo aps que provocou o erro. No entanto, se o procedimento de gerenciamento de erros incluir RETRY, a linha do programa que provocou o erro ser executada novamente. Caso o comando especifique um procedimento a ser executado quando ocorrer um erro, voc poder utilizar ERROR( ), MESSAGE( ), LINENO( ) e PROGRAM( ) para passar o nmero do erro, a mensagem de erro, o nmero da linha do programa e o nome do programa para o procedimento. Estas informaes podem ser utilizadas para corrigir a causa do erro. Comentrios Quando ocorre um erro durante a execuo do programa, o Visual FoxPro executa o comando especificado com ON ERROR. Normalmente, ON ERROR utiliza DO para executar um procedimento de gerenciamento de erros. Utilize ON ERROR sem um comando para restaurar o Gerenciador de erros padro do Visual FoxPro. Os procedimentos ON ERROR no podem ser aninhados. Caso ON ERROR seja emitido a partir de um procedimento, o Gerenciador de erros padro do Visual FoxPro ser restaurado. ON SHUTDOWN Especifica um comando a ser executado quando voc tentar sair do Visual FoxPro ou Microsoft Windows. Sintaxe
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 93 de 103 ON SHUTDOWN [Comando] Argumentos Emita ON SHUTDOWN sem Comando para liberar o comando ON SHUTDOWN atual. Comentrios O comando especificado em ON SHUTDOWN ser executado se voc tentar sair do Visual FoxPro. Se voc tentar sair do Microsoft Windows a partir do Gerenciador de programas, enquanto o Visual FoxPro estiver aberto, o controle ser retornado ao Visual FoxPro e o comando especificado em ON SHUTDOWN ser executado. Normalmente, o comando ON SHUTDOWN um comando DO que executa uma rotina para exibir uma caixa de dilogo. A caixa de dilogo pergunta se voc tem certeza de que deseja sair do aplicativo atual e do Visual FoxPro. Se voc quiser sair do aplicativo, a rotina poder fechar arquivos abertos, limpar o ambiente do Visual FoxPro e, em seguida, executar QUIT. Caso voc no queira sair do aplicativo atual, a rotina poder retornar o controle novamente para o aplicativo. READ EVENTS Inicia o processamento do evento. Sintaxe READ EVENTS Comentrios Quando READ EVENTS emitido, o Visual FoxPro inicia o processamento do evento. Emita CLEAR EVENTS para interromper o processamento do evento. Quando CLEAR EVENTS emitido, e execuo do programa continua com a linha imediatamente aps READ EVENTS. RETURN Retorna o controle do programa para o programa que originou a chamada. Sintaxe RETURN [eExpresso | TO MASTER | TO NomeProcedimento] Argumentos
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 94 de 103 eExpresso Especifica uma expresso retornada para o programa que originou a chamada. Se voc omitir RETURN ou a expresso de retorno, verdadeiro (.T.) ser retornado automaticamente para o programa de chamada. TO MASTER Retorna o controle para o programa de chamada de nvel mais alto. TO NomeProcedimento controle retornado. Comentrios RETURN finaliza a execuo de um programa, procedimento ou funo e retorna o controle para o programa que originou a chamada, o programa que originou a chamada de nvel mais alto, outro programa ou a janela Comando. O Visual FoxPro libera variveis de memria PRIVATE quando RETURN executado. Normalmente, RETURN colocado no fim de um programa, procedimento ou funo para retornar o controle para um programa de nvel mais alto. No entanto, um RETURN implcito ser executado se voc omitir esse comando. RLOCK() Tenta bloquear o(s) registro(s) de uma tabela. Sintaxe RLOCK([nreaTrabalho | cAliasTabela] | [cListaNmerosRegistro, nreaTrabalho | cAliasTabela]) Tipos de retorno Lgico Argumentos nreaTrabalho | cAliasTabela Especifica o nmero da rea de trabalho ou alias de tabela para uma tabela aberta em outra rea de trabalho. Se voc no especificar a rea de trabalho ou alias, RLOCK( ) ir tentar bloquear o registro atual da tabela na rea de trabalho selecionada no momento. cListaNmerosRegistro Especifica que RLOCK( ) tenta bloquear vrios registros. A expresso de caractere cListaNmerosRegistro especifica um ou mais nmeros de registro, separados por vrgulas,
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Especifica o programa para o qual o

Visual FoxPro 8.0 O Caminho das Pedras Pgina 95 de 103 que RLOCK( ) tenta bloquear. Por exemplo, para tentar bloquear os primeiros quatro registros de uma tabela, cListaNmerosRegistro deve conter 1, 2, 3, 4. Para bloquear vrios registros, voc deve ativar SET MULTILOCKS e incluir o nmero da rea de trabalho (nreaTrabalho) ou o alias (cAliasTabela) da tabela onde tentou bloquear vrios registros. Tambm possvel bloquear vrios registros movendo o ponteiro do registro at aquele que pretende bloquear. A seguir, emita RLOCK( ) ou LOCK( ) e repita este processo para registros adicionais. No Visual FoxPro, voc pode especificar 0 como um nmero de registro. Esta especificao permite que voc bloqueie o cabealho da tabela. Importante Mantenha o cabealho da tabela bloqueado pelo menor tempo possvel, pois outros usurios no podero acrescentar registros tabela enquanto aquele estiver bloqueado. Para liberar o bloqueio do cabealho da tabela, utilize UNLOCK RECORD 0, UNLOCK ou UNLOCK ALL. Se o bloqueio de todos os registros especificados em cListaNmerosRegistro for bem-sucedido, RLOCK( ) retornar verdadeiro (.T.). Se um ou mais registros especificados em cListaNmerosRegistro no puderem ser bloqueados, RLOCK( ) retornar falso (.F.) e nenhum registro ser bloqueado. Em ambos os casos, os bloqueios de registros existentes permanecem na mesma posio. O bloqueio de vrios registros um processo adicional o posicionamento de bloqueios adicionais no libera os bloqueios existentes. Quanto ao desempenho, sempre mais rpido bloquear a tabela inteira do que bloquear at mesmo um pequeno nmero de registros. Comentrios RLOCK( ) idntico a LOCK( ). Se o(s) bloqueio(s) for(em) bem-sucedido(s), RLOCK( ) retornar verdadeiro (.T.). Os registros bloqueados encontram-se disponveis para o acesso de leitura e gravao pelo usurio que posicionou os bloqueios. J para os demais usurios da rede, a disponibilidade de acesso somente para leitura. A execuo de RLOCK( ) no garante que a(s) tentativa(s) de bloqueio de registro tenha(m) sido bem-sucedida(s). Um bloqueio de registro no pode ser posicionado em um registro ou em uma tabela
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 96 de 103 j bloqueados por outro usurio. Se, por qualquer motivo, o(s) bloqueio(s) de registro no puder(em) ser posicionado(s), RLOCK( ) retornar falso (.F.). Como padro, RLOCK( ) tenta bloquear um registro uma vez. Utilize SET REPROCESS para tentar novamente e de forma automtica um bloqueio de registro quando a primeira tentativa falhar. SET REPROCESS controla o nmero de tentativas de bloqueio ou sua durao quando a tentativa de bloqueio inicial malsucedida. Para obter maiores informaes sobre SET REPROCESS e bloqueio de tabelas, consulte SET REPROCESS. SET MULTILOCKS determina se voc pode bloquear vrios registros em uma tabela. Se SET MULTILOCKS estiver desativado (o padro), voc s poder bloquear um nico registro da tabela. Se SET MULTILOCKS estiver ativado, voc poder bloquear vrios registros da tabela. Para obter maiores informaes, consulte SET MULTILOCKS. Um registro de tabela s pode ser desbloqueado pelo usurio que fez o bloqueio. Os bloqueios de registro podem ser liberados da seguinte forma: emitindo UNLOCK, fechando a tabela ou saindo do Visual FoxPro. UNLOCK pode ser utilizado para liberar bloqueios de registro na rea de trabalho atual, em uma rea de trabalho especfica ou em todas. Para obter maiores informaes, consulte UNLOCK. Ao passar SET MULTILOCKS de ativado (ON) para desativado (OFF) ou vice-versa, executa-se implicitamente UNLOCK ALL. Todos os bloqueios de registro de todas as reas de trabalho so liberados. Para fechar tabelas, utilize USE, CLEAR ALL ou CLOSE DATABASES. Para obter maiores informaes sobre o bloqueio de registros e arquivos e o compartilhamento de tabelas em uma rede, consulte o captulo 17, Programando para acesso compartilhado, no Guia do Desenvolvedor. SetAll() Atribui uma definio de propriedade em todos os controles, ou em uma classe especfica de controles, de um objeto Container. Sintaxe Container.SetAll(cPropriedade, Valor [, cClasse]) Argumentos
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 97 de 103 cPropriedade Especifica a propriedade a ser definida. Valor Especifica a nova definio da propriedade. O tipo de dado de Valor depende da propriedade que est sendo definida. cClasse Especifica o nome da classe, que a classe em que o objeto est baseado e no a classe principal do Visual FoxPro para o objeto. Comentrios Utilize o mtodo SetAll para definir um propriedade para todos, ou para uma classe especfica de controles Container. Por exemplo, para definir a propriedade BackColor em todos os objetos Column em um controle Grid com vermelho, emita o seguinte: Form1.Grid1.SetAll("BackColor", RGB(255, 0, 0), "Column") Voc tambm pode definir propriedades para objetos que esto contidos por outros objetos dentro do recipiente. Para definir a propriedade ForeColor dos Headers que esto contidos por cada objeto Column contido no controle Grid para a cor verde, emita o seguinte: Form1.Grid1.SetAll("ForeColor", RGB(0, 255, 0), "Header") SKIP Move o ponteiro do registro para frente e para trs em uma tabela. Sintaxe SKIP [nRegistros] [IN nreaTrabalho | cAliasTabela] Argumentos nRegistros Especifica o nmero de registros que sero percorridos pelo ponteiro do registro. A emisso de SKIP sem nRegistros avanar o ponteiro para o prximo registro. Se nRegistros resultar em um nmero positivo, o ponteiro do registro se mover em direo ao final dos registros do arquivo nRegistros. Se nRegistros resultar em um nmero negativo, o ponteiro do registro se mover em direo ao comeo dos registros do arquivo nRegistros. Se o ponteiro do registro estiver posicionado sobre o ltimo registro de uma tabela e SKIP for executado sem nenhum argumento, um valor 1 maior que o nmero de registros na tabela ser retornado por
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 98 de 103 RECNO( ) e EOF( ) retornar verdadeiro (.T.). Se o ponteiro do registro estiver posicionado no primeiro registro de uma tabela e SKIP -1 for executado, RECNO( ) retornar 1 e BOF( ) retornar verdadeiro (.T.). IN nreaTrabalho | cAliasTabela Move o ponteiro do registro em uma tabela dentro de uma rea de trabalho especfica. nreaTrabalho especifica o nmero da rea de trabalho e cAliasTabela especifica um alias de tabela ou de rea de trabalho. Comentrios Se a tabela tiver uma marca de ndice de controle mestre ou um arquivo de ndice, SKIP mover o ponteiro para o registro determinado pela seqncia de ndice. SKIP, exemplo do comando
CLOSE DATABASES OPEN DATABASE (HOME( ) + 'samples\data\testdata') USE customer && Abre a tabela Customer CLEAR SKIP 4 IN 'customer' ? RECNO('customer') && Exibe 5 GO BOTTOM SKIP -5 ? RECNO( )

TABLEREVERT()

Ignora as alteraes feitas em uma linha, tabela ou cursor que esteja utilizando buffer e restaura os dados de OLDVAL( ) para cursores remotos e os valores atuais do disco para tabelas e cursores locais. Sintaxe TABLEREVERT([lTodasLinhas [, cAliasTabela | nreaTrabalho]]) Tipos de retorno Numrico Argumentos lTodasLinhas Determina se todas as mudanas feitas na tabela ou no cursor sero ignoradas. Se lTodasLinhas for verdadeiro (.T.), e a utilizao do buffer de tabela estiver ativada, as alteraes feitas em todos os registros da tabela ou do cursor sero ignoradas. Se lTodasLinhas for falso (.F.) e a utilizao do buffer de tabela estiver ativada, somente as alteraes feitas no registro atual da tabela ou do cursor sero ignoradas.
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 99 de 103 Se a utilizao do buffer de linha estiver ativada, o valor de lTodasLinhas ser ignorado, e as alteraes feitas no registro atual da tabela ou do cursor sero ignoradas. O valor padro de lTodasLinhas falso (.F.). cAliasTabela Especifica o alias da tabela ou do cursor cujas alteraes sero ignoradas. NreaTrabalho Especifica a rea de trabalho da tabela ou do cursor cujas alteraes sero ignoradas. Comentrios A funo TABLEREVERT( ) retornar o nmero de registros cujas alteraes foram ignoradas. Observao Em uma rede, os dados presentes atualmente no disco podero diferir dos dados contidos no disco quando a tabela e o cursor foram criados. Outros usurios da rede podem ter alterado os dados depois que a tabela foi aberta ou depois que o cursor foi criado. A funo TABLEREVERT( ) no pode ignorar as alteraes feitas em uma tabela ou cursor onde a utilizao do buffer de linha no esteja ativada. Se voc emitir TABLEREVERT( ), e a utilizao do buffer de linha ou de tabela no estiver ativada, o Visual FoxPro ir gerar uma mensagem de erro. Utilize a funo CURSORSETPROP( ) para ativar ou desativar a utilizao do buffer de linha ou de tabela. As alteraes sero ignoradas na tabela ou cursor aberto na rea de trabalho selecionada atualmente, se TABLEREVERT( ) for emitida sem os argumentos opcionais cAliasTabela ou nreaTrabalho. A funo TABLEREVERT( ) no retorna um ponteiro de registro a sua posio original. TABLEUPDATE() Grava fisicamente as alteraes feitas em uma linha, tabela ou cursor que esteja utilizando buffer. Sintaxe TABLEUPDATE([nLinhas nreaTrabalho] [, cMatrizErro]) Tipos de retorno
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

[,

lForar]]

[,

cAliasTabela

Visual FoxPro 8.0 O Caminho das Pedras Pgina 100 de 103 Lgico Argumentos nLinhas Especifica se as alteraes feitas na tabela ou no cursor sero gravadas fisicamente.Se nLinhas for 0 e a utilizao do buffer de tabela ou de linha estiver ativo, apenas as alteraes feitas no registro atual da tabela ou do cursor sero gravadas fisicamente. Se nLinhas for 1 e a utilizao do buffer de tabela estiver ativa, as alteraes feitas em todos os registros na tabela ou no cursor sero gravadas fisicamente. Se nLinhas for 1 e a utilizao do buffer de linha estiver ativo, apenas as alteraes feitas no registro atual da tabela ou do cursor sero gravadas fisicamente. Se nLinhas for 2 e a utilizao do buffer de tabela estiver ativa, as alteraes feitas em todos os registros na tabela ou no cursor sero gravadas fisicamente. Se nLinhas for 2 e a utilizao do buffer de linha estiver ativo, apenas as alteraes feitas no registro atual na tabela ou no cursor sero gravadas fisicamente. Ao contrrio do que acontece com os valores 0 e 1 para nLinha, um erro no ocorre quando uma alterao no pode ser gravada fisicamente e o Visual FoxPro continua a processar qualquer registro restante na tabela ou no cursor. Se cMatrizErro for includa, uma matriz contendo informaes de erro ser criada quando ocorrer um erro. O valor padro para nLinhas 0. lForar Determina se as alteraes feitas na tabela ou no cursor por outro usurio da rede sero sobrescritas. Se lForar for verdadeiro (.T.), quaisquer alteraes feitas na tabela ou no cursor por outro usurio da rede sero sobrescritas. Se lForar for falso (.F.), o Visual FoxPro gravar fisicamente as alteraes na tabela ou no cursor, comeando com o primeiro registro at o fim da tabela ou do cursor. Se um registro modificado por outro usurio da rede for encontrado, o Visual FoxPro ir gerar um erro. Quando o Visual FoxPro gera o erro , este pode ser gerenciado atravs da rotina ON ERROR, e esta rotina pode emitir a funo TABLEUPDATE( ) com lForar definido para verdadeiro (.T.) a fim de gravar fisicamente as alteraes feitas no registro. Opcionalmente, se uma transao estiver em andamento, a rotina ON ERROR poder gerenciar o erro e, em seguida, emitir ROLLBACK para reverter a tabela ou o cursor para seu estado original.
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 101 de 103 O valor padro para lForar falso (.F.). cAliasTabela Especifica o alias da tabela ou do cursor no qual as alteraes so gravadas fisicamente. nreaTrabalho Especifica a rea de trabalho da tabela ou do cursor no qual as alteraes so gravadas fisicamente. cMatrizErro Especifica o nome de uma matriz criada quando nLinhas 2 e altera um registro que no pode ser gravado fisicamente. A matriz possui uma coluna simples contendo o nmero dos registros para os quais as alteraes no puderam ser gravadas fisicamente. Comentrios A funo TABLEUPDATE( ) retornar verdadeiro (.T.) se as alteraes feitas em todos os registros forem gravadas fisicamente; do contrrio, TABLEUPDATE( ) retornar falso (.F.). Se voc especificar 0 ou 1 nLinha, o ponteiro do registro permanece em um registro onde as alteraes no puderam ser gravadas fisicamente e pode emitir AERROR( ) para determinar porque as alteraes no puderam ser gravadas. A funo TABLEUPDATE( ) no poder gravar fisicamente as alteraes feitas em uma tabela ou cursor que no tenha a utilizao do buffer de linha ou de tabela ativada. Se voc emitir TABLEUPDATE( ), e a utilizao do buffer de linha no estiver ativada, o Visual FoxPro ir gerar uma mensagem de erro. Entretanto, TABLEUPDATE( ) ainda poder gravar fisicamente alteraes em uma tabela ou cursor que possua regras de validao. Utilize CURSORSETPROP( ) para ativar ou desativar a utilizao do buffer de linha ou de tabela. As alteraes so gravadas fisicamente na tabela ou no cursor aberto na rea de trabalho atualmente selecionada se TABLEUPDATE( ) for emitida sem os argumentos opcionais cAliasTabela ou nreaTrabalho. UNLOCK Libera um bloqueio de registro, bloqueios de mltiplos registros ou um bloqueio de arquivo de uma tabela, ou libera todos os bloqueios de registros e arquivos de todas as tabelas abertas. Sintaxe UNLOCK [RECORD nNmeroRegistro] [IN nreaTrabalho | cAliasTabela]
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 102 de 103 [ALL] Argumentos RECORD nNmeroRegistro Libera o bloqueio do registro em um registro de nmero nNmeroRegistro. Voc pode especificar 0 para nNmeroRegistro para desbloquear o cabealho de tabela com LOCK(0) ou RLOCK(0). A emisso de UNLOCK RECORD nNmeroRegistro para um registro em uma tabela com um bloqueio de arquivo libera o bloqueio. IN nreaTrabalho | cAliasTabela Libera um bloqueio (ou bloqueios) de registro ou um bloqueio de arquivo de uma tabela em uma determinada rea de trabalho. nreaTrabalho especifica o nmero da rea de trabalho e cAliasTabela especifica o alias da tabela. Se voc no incluir nreaTrabalho ou cAliasTabela, UNLOCK ir liberar um bloqueio (ou bloqueios) de registro ou um bloqueio de arquivo da tabela na rea de trabalho selecionada no momento. ALL Libera todos os bloqueios de registros e de arquivos em todas as reas de trabalho. Para obter maiores informaes sobre o bloqueio de registros e de arquivos e o compartilhamento de tabelas em uma rede, consulte o captulo 17, Programando para acesso compartilhado, no Guia do Desenvolvedor. Comentrios Os bloqueios de registros e de arquivos s podem ser removidos de uma tabela pelo usurio que os executou. UNLOCK no consegue desbloquear uma tabela aberta para uso exclusivo. Um bloqueio (ou bloqueios) de registro ou um bloqueio de arquivo ser liberado de uma tabela na rea de trabalho atual se voc emitir UNLOCK sem argumentos adicionais. Caso tenham sido estabelecidas relaes entre tabelas, a liberao de um bloqueio (ou bloqueios) de registro ou de um bloqueio de arquivo de uma das tabelas no desbloquear os registros ou arquivos relacionados. preciso liberar os bloqueios de registros ou de arquivos explicitamente em cada arquivo relacionado. Voc pode liberar todos os bloqueios em quaisquer tabelas relacionadas emitindo UNLOCK ALL (isso tambm libera bloqueios em arquivos no-relacionados).
Fox Total Network http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino

Visual FoxPro 8.0 O Caminho das Pedras Pgina 103 de 103 UPPER() Retorna a expresso de caracteres especificada em maiscula. Sintaxe UPPER(cExpresso) Tipos de retorno Caractere Argumentos cExpresso Especifica que expresso de caracteres UPPER( ) converte em maiscula. Comentrios Cada letra minscula (a z) na expresso de caracteres convertida em maiscula (A Z) na seqncia retornada. Todos os outros caracteres permanecem inalterados.

Fox Total Network http://www.foxtotal.com.br


Copyright 2004 Nilton Paulino