Escolar Documentos
Profissional Documentos
Cultura Documentos
O Caminho Das Pedras PDF
O Caminho Das Pedras PDF
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 Linguagem Visual
Tela Janela
Tela de Dados Formulrio de Dados
Lib Biblioteca de classes
Get Textbox
Say Label
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.
Project Manager
Database Designer
Form Designer
Menu Designer
Report Designer
Program Editor
O Project Manager
Como de se notar na figura do Project Manager acima, h seis abas dividindo os arquivos
do projeto por categoria, sendo elas:
Classes exibe as bibliotecas de classes (vcx) includas no projeto assim como as classes
nelas contidas.
Other exibe os demais tipos de arquivos que possam estar inclusos no projeto, como
imagens, arquivos texto, menus, etc.
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.
Run serve para executar o componente selecionado. Os componentes que podem ser
executados so os forms, labels, reports, prgs, menus.
Build... serve para compilar o projeto, permitindo-os criar apps, dlls e exes.
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.
Ainda sobre o Gerenciador de projetos, podemos adicionar que h um menu especfico para o
mesmo, conforme mostra a prxima figura.
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
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.
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.
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.
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
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:
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:
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.
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 Tipo Tamanho
Id_cliente Character 6
Nome_cliente Character 40
Endereo Character 40
Numero Character 5
Bairro Character 20
Cep Character 8
Cidade Character 20
Estado Character 2
Ddd Character 2
Telefone Character 8
Contato Character 20
Tabela 3
Tabela: Fornecedores
Nome do Campo Tipo Tamanho
Id_fornecedor Character 6
Nome_fornecedor Character 40
Endereo Character 40
Numero Character 5
Bairro Character 20
Cep Character 8
Cidade Character 20
Estado Character 2
Ddd Character 2
Telefone Character 8
Contato Character 20
Tabela 4
Tabela: ContasReceber
Nome do Campo Tipo Tamanho
Id_ContaReceber Character 6
ID_Cliente Character 6
TipoDocto Character 10
NumeroDocto Character 8
DataVencimento Date 8
Valor Numeric 7,2
Quitado Logic 1
DataPagto Date 8
ValorPagto Numeric 7,2
Cheque_banco Character 3
Cheque_agencia Character 7
Cheque_numconta Character 10
Cheque_numero Character 6
Cheque_titular Character 40
DataCadastro Date 8
ID_usuario Character 3
Tabela 5
Tabela: ContasPagar
Nome do Campo Tipo Tamanho
Id_ContaPagar Character 6
ID_Fornecedor Character 6
TipoDocto Character 10
NumeroDocto Character 8
DataVencimento Date 8
Valor Numeric 7,2
Quitado Logic 1
DataPagto Date 8
ValorPagto Numeric 7,2
DataCadastro Date 8
ID_usuario Character 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 Tipo Tamanho
Id_usuario Character 3
NomeUsuario Character 25
SenhaUsuario Character 8
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:
Clique sobre o boto New Table. Aparecer ento o dilogo Create para que voc informe o
nome da tabela a ser criada.
Ao clicar em Save, um novo dilogo aparecer onde voc definir o contedo da tabela.
Agora s informar as informaes de cada campo.
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.
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:
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.
Tabela 7
Configurao Descrio
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.
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:
Name o nome que daremos para a marca (TAG) de ndice da tabela. So permitidos at
10 caracteres.
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.
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.
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.
Tabela 8
Tabela Pai Tabela Filha
Clientes->id_cliente ContaReceber->id_cliente
Fornecedores->id_fornece ContaPagar->id_fornece
Usuarios->id_usuario ContaReceber->id_usuario
Usuarios->id_usuario ContaPagar->id_usuario
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.
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:
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:
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).
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:
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:
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.
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.
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:
Essa Stored Procedures capaz de gerar cdigo seqencial para qualquer tabela do banco de
dados, desde que sejam seguidas as seguintes regras:
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.
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:
Muito bem, a parte de banco de dados est finalmente pronta! Agora partiremos para
conhecer os formurios.
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.
No dilogo acima, escolha New Form. A Form Designer ser aberta, conforme mostra a
prxima figura.
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:
H cinco abas nessa janela: All, Data, Methods, Layout e Other. Vejamos para que servem:
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?
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.
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.
1. Com o formulrio aberto, clique sobre o mesmo e depois clique sobre a aba Layout da
janela de propriedades.
3. Mude a propriedade AutoCenter para .T. (True). Isto far com que a janela seja
centralizada automaticamente ao ser aberta.
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.
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.
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.
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:
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.
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 Tipo de Objeto Exemplo
Chk CheckBox chkReadOnly
Col Collection colFormObjects
Cbo ComboBox cboEnglish
Cmd CommandButton cmdCancel
Cmg CommandGroup cmgChoices
Cnt Container cntMoverList
Ctl Control ctlFileList
Cad CursorAdapter cadInventory
<user- Custom user-defined
defined>
Dte DataEnvironment dteSalesForm
Edt EditBox edtTextArea
Frm Form frmFileOpen
Frs FormSet frsDataEntry
Grd Grid grdPrices
Grc Column grcCurrentPrice
Grh Header grhTotalInventory
Hpl HyperLink hplHomeURL
Img Image imgIcon
Lbl Label lblHelpMessage
Lin Line linVertical
Lst ListBox lstPolicyCodes
Olb OLEBoundControl olbObject1
Ole OLE oleObject1
Opt OptionButton optFrench
Opg OptionGroup opgType
Pag Page pagDataUpdate
Pgf PageFrame pgfLeft
Prj ProjectHook prjBuildAll
Sep Separator sepToolSection1
Shp Shape shpCircle
Spn Spinner spnValues
Txt TextBox txtGetText
Tmr Timer tmrAlarm
Tbr ToolBar tbrEditReport
Xad XMLAdapter xadRemoteXMLData
Xfd XMLField xfdPrices
Xtb XMLTable 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.
Tabela 10 - MTODOS
MTODO OBJETIVO
BloquearRegistro() Bloqueia o registro para operaes de alterao e
remoo (delete).
CoordenaBotoes() Coordena o estado dos botes do formulrio de acordo
com cada operao.
CoordenaControles() Coordena o estado dos controles de edio dos dados,
tornando-os editveis ou no editveis.
CoordenaNavegacao() Coordena o estado dos botes de navegao do
formulrio.
CriticarDados() Reservado para a escrita de cdigo para validao dos
dados do formulrio.
PosicionarPrimeiroCampo() 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.
TratarErro() Faz o tratamento de erros do formulrio.
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
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.
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.
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.
Tabela 13
BOTO: Novo
PROPRIEDADE VALOR A ATRIBUIR
Caption \<Novo
Name bntNovo
Picture imagens\new.bmp
Height 27
Left 3
PicturePosition 1
Top 179
Width 78
EVENTO/MTODO CDIGO A EXECUTAR
Click Event
Tabela 14
BOTO: Gravar
PROPRIEDADE VALOR A ATRIBUIR
Caption \<Gravar
Name bntGravar
Picture 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 27
Left 80
PicturePosition 1
Top 179
Width 78
EVENTO/MTODO CDIGO A EXECUTAR
Click Event
Tabela 15
BOTO: Editar
PROPRIEDADE VALOR A ATRIBUIR
Caption \<Editar
Name bntEditar
Picture Imagens\wzedit.bmp
Height 27
Left 157
PicturePosition 1
Top 179
Width 78
EVENTO/MTODO CDIGO A EXECUTAR
Click Event
Tabela 16
BOTO: Desfazer
PROPRIEDADE VALOR A ATRIBUIR
Caption \<Desfazer
Name 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 imagens\wzundo.bmp
Height 27
Left 234
PicturePosition 1
Top 179
Width 78
EVENTO/MTODO CDIGO A EXECUTAR
Click Event
Tabela 17
BOTO: Excluir
PROPRIEDADE VALOR A ATRIBUIR
Caption E\<xcluir
Name bntExcluir
Picture imagens\wzundo.bmp
Height 27
Left 311
PicturePosition 1
Top 179
Width 78
EVENTO/MTODO CDIGO A EXECUTAR
Click Event
Tabela 18
BOTO: Primeiro Registro
PROPRIEDADE VALOR A ATRIBUIR
Caption
Name bntPrimeiro
Picture imagens\wztop.bmp
Height 27
Left 390
PicturePosition 1
Top 179
ToolTip Text Primeiro Registro
Width 26
EVENTO/MTODO CDIGO A EXECUTAR
Click Event
Tabela 19
BOTO: Registro Anterior
PROPRIEDADE VALOR A ATRIBUIR
Caption
Name bntAnterior
Fox Total Network
http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino
Visual FoxPro 8.0 O Caminho das Pedras Pgina 39 de 103
Picture imagens\wzback.bmp
Height 27
Left 416
PicturePosition 1
Top 179
ToolTip Text Registro Anterior
Width 26
EVENTO/MTODO CDIGO A EXECUTAR
Click Event
Tabela 20
BOTO: Prximo Registro
PROPRIEDADE VALOR A ATRIBUIR
Caption
Name bntProximo
Picture imagens\wznext.bmp
Height 27
Left 442
PicturePosition 1
Top 179
ToolTip Text Prximo Registro
Width 26
EVENTO/MTODO CDIGO A EXECUTAR
Click Event
Tabela 21
BOTO: ltimo Registro
PROPRIEDADE VALOR A ATRIBUIR
Caption
Name bntUltimo
Picture imagens\wzend.bmp
Height 27
Left 468
PicturePosition 1
Top 179
ToolTip Text ltimo Registro
Width 26
EVENTO/MTODO CDIGO A EXECUTAR
Click Event
Tabela 22
BOTO: Fechar
PROPRIEDADE VALOR A ATRIBUIR
Caption Fecha\<r
Name bntFechar
Picture imagens\wzclose.bmp
Fox Total Network
http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino
Visual FoxPro 8.0 O Caminho das Pedras Pgina 40 de 103
Height 27
Left 496
PicturePosition 1
Top 179
Width 78
EVENTO/MTODO CDIGO A EXECUTAR
Click Event
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?
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:
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:
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 CDIGO DO MTODO
BloquearRegistro
CoordenaBotoes()
CoordenaControles()
CoordenaNavegacao()
CriticarDados()
PosicionarPrimeiroCampo()
=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
DO CASE
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])
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
Init
Faa isso para todos os mtodos que precisas criar para o formulrio.
3. Clique em Add.
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.
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.
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.
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.
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:
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.
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.
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.
Gostaria que voc desse uma olhada na seguinte planta baixa de uma casa e imaginasse a
relao hierrquica entre cada objeto:
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.
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.
Sendo:
Abra o seu formulrio de usurios para modificar e depois clique no boto executar
formulrio .
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.
S que voc no saber qual o nome do formulrio. Por isso ficar invivel usar da forma
que fizemos acima.
Thisform quer dizer este formulrio. Ou seja, faz uma referncia ao formulrio que est
executando o cdigo sem se importar qual o seu nome.
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.
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.
Imagine que inserimos um objeto container e nele colocamos alguns outros objetos como por
exemplo botes de comando.
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.
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.
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.
Antes que voc pergunte como definir uma classe, vou lhe explicar.
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:
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.
Agora que nossa classe est criada, necessrio que faamos as adequaes necessrias para
que possamos reaproveit-la (herana).
2. Caso a classe ainda no aparea na lista de classes, use o boto Add... para adicion-
la.
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:
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.
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:
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
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.
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.
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.
Agora que temos nosso formulrio disponvel para ser alterado, faremos as seguintes
modificaes para que o mesmo se transforme em nosso formulrio de clientes:
1. Clique com o boto direito do mouse sobre uma rea livre do formulrio e escolha
Data Environment.
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.
Agora sim, voc pode criar todos os formulrios de cadastro, inclusive recrie o formulrio de
usurios para que todos fiquem baseados na mesma classe.
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 .
OBJETO -
ENCAPSULAO
Sintaxe
& NomeVar[.cExpresso]
Argumentos
? &gcX
Comentrios
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
Comentrios
6 O valor nulo.
7 O valor nulo.
de OL.
7 O valor nulo.
Sintaxe
ALLTRIM(cExpresso)
Tipos de retorno
Caractere
Argumentos
Comentrios
Sintaxe
APPEND [BLANK]
[IN nreaTrabalho | cAliasTabela]
[NOMENU]
Argumentos
selecionada.
Comentrios
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.
Sintaxe
BOF([nreaTrabalho | cAliasTabela])
Tipos de retorno
Lgico
Argumentos
Comentrios
Sintaxe
CANCEL
Comentrios
Sintaxe
DELETE
[Escopo] [FOR lExpresso1] [WHILE lExpresso2]
[IN nreaTrabalho | cAliasTabela]
[NOOPTIMIZE]
Argumentos
Comentrios
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
Visual FoxPro 8.0 O Caminho das Pedras Pgina 78 de 103
Argumentos
Comentrios
Sintaxe
EMPTY(eExpresso)
Tipos de Retorno
Lgico
Argumentos
Numrica 0
Moeda 0
Flutuante 0
Nmero inteiro 0
Dupla 0
Comentrios
Sintaxe
EOF([nreaTrabalho | cAliasTabela])
Tipos de Retorno
Lgico
Argumentos
Comentrios
Sintaxe
Argumentos
Comentrios
Sintaxe
Ou
Ou
Argumentos
Comentrios
Sintaxe
IF lExpresso [THEN]
Comandos
[ELSE
Comandos]
ENDIF
Argumentos
depois de ENDIF.
Comentrios
Sintaxe
Tipos de retorno
Lgico
Argumentos
Comentrios
Sintaxe
LOCAL ListaVar
Ou
Argumentos
Comentrios
Sintaxe
LPARAMETERS ListaParmetros
Argumentos
Comentrios
Sintaxe
MESSAGEBOX(cTextoMensagem [, nTipoCaixaDilogo [,
cTextoBarraTtulo]])
Tipos de retorno
Numrico
Argumentos
1 Botes OK e Cancelar.
Valor cone
16 Sinal de parada.
32 Ponto de interrogao.
48 Ponto de exclamao.
0 Primeiro boto.
Comentrios
1 OK
2 Cancelar
3 Anular
4 Repetir
5 Ignorar
6 Sim
7 No
Sintaxe
[Form.]Object.Refresh
Comentrios
Sintaxe
Object.Release
Comentrios
Sintaxe
Control.SetFocus
Comentrios
Sintaxe
ON ERROR
[Comando]
Argumentos
Comentrios
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
Comentrios
Sintaxe
READ EVENTS
Comentrios
Sintaxe
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
Comentrios
Sintaxe
RLOCK([nreaTrabalho | cAliasTabela]
| [cListaNmerosRegistro, nreaTrabalho | cAliasTabela])
Tipos de retorno
Lgico
Argumentos
Comentrios
Sintaxe
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
Comentrios
SKIP Move o ponteiro do registro para frente e para trs em uma tabela.
Sintaxe
SKIP
[nRegistros]
[IN nreaTrabalho | cAliasTabela]
Argumentos
Comentrios
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
Tipos de retorno
Numrico
Argumentos
Comentrios
Sintaxe
Tipos de retorno
Fox Total Network
http://www.foxtotal.com.br
Copyright 2004 Nilton Paulino
Visual FoxPro 8.0 O Caminho das Pedras Pgina 100 de 103
Lgico
Argumentos
Comentrios
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
Comentrios
Sintaxe
UPPER(cExpresso)
Tipos de retorno
Caractere
Argumentos
Comentrios