Você está na página 1de 19

A U L A

Criando e Gerenciando Dados


10 Com o Visual FoxPro
Parte 1

O que é um banco de dados

Em termos gerais, um banco de dados é um conjunto de informações relacionadas


e organizadas de forma lógica.

Existem diversos formatos de bancos de dados. Desde um simples arquivo texto


(TXT) ou uma planilha de cálculos (Excel) até os mais modernos Sistemas
Gerenciadores de Bancos de Dados (SGDBs) existentes no mercado podem ser
considerados bancos de dados, desde que estejam estruturados de forma
organizada e que sirva ao fim para que se destina.

Agora pois, quanto à eficácia, com certeza os sistemas SGDBs mais modernos são
infinitamente melhores que simples arquivos texto ou planilhas.

O Banco de Dados do Visual FoxPro

Apesar de o Visual FoxPro não se enquadrar como um SGDB completo ele o é, em


parte e no que se propõe, não deixa a desejar.

No entanto é importante sabermos qual é o objetivo do banco de dados do Visual


FoxPro e quais os seus limites para que não venhamos cometer o pecado de
projetarmos aplicações que não fiquem bem com o banco de dados nativo do Visual
FoxPro.

O banco de dados do Visual FoxPro não se enquadra na arquitetura


Cliente/Servidor. Embora seja possível desenvolver aplicativos utilizando o banco
nativo nessa arquitetura, com certeza será um pouco mais trabalhoso que se
utilizarmos um banco de dados já criado para este fim. Entre os bancos já criados
para esse tipo de arquitetura podemos citar alguns como MS SQL Server, Oracle,
MySQL, PostgreSQL, FireBird e outros.

O banco de dados do Visual FoxPro foi projetado para aplicações destinadas a


serem executadas em rede local. Neste tipo de ambiente torna-se praticamente
imbatível em termos de velocidade e até mesmo certo ponto em capacidade de
armazenamento.
A U L A

10
Assim como em outros ambientes xBase derivados do dBase, o Visual FoxPro
armazena os dados em arquivos (tabelas) do tipo DBF. Embora seu formato DBF
seja um pouco diferente do padrão original, ainda é possível acessar os formatos
anteriores sem a necessidade de conversão, mas as tabelas criadas no banco de
dados do Visual FoxPro talvez não sejam abertas em outras linguagens xBase sem
o auxílio de um Driver ODBC ou OLEDB.

Capacidades do banco de dados do Visual FoxPro

Estes são os recursos do banco de dados do Visual FoxPro

Recurso Capacidade
N# máximo de registros por tabela (dbf) 1 bilhão
Tamanho máximo de uma tabela 2 gigabytes
Tamanho máximo de um arquivo FPT (memo) 2 gigabytes
N# máximo de caracteres por registro 65.500
N# máximo de campos por registro1 255
N# máximo de tabelas abertas ao mesmo tempo2 65.535
N# máximo de caracteres por campo da tabela 254
N# máximo de bytes por chave de índice em um 100
índice não compacto3
N# máximo de bytes por chave de índice em um 240
índice compacto3
N# máximoo de arquivos de índice abertos por Ilimitado
tabela2
N# máximo de índices abertos em todas as áreas Ilimitado
de trabalho
N# máximo de relacionamentos Ilimitado
Tamanho máximo de expressões relacionais Ilimitado

1. Se um ou mais campos permitir valores NULL (nulo), o limite é reduzido em um


para 254 campos.

2. Limitado pela memória e pelo número de manipuladores de arquivos permitidos


pelo sistema operacional. Arquivos de índice .cdx usam apenas um manipulador de
arquivo.

3. Se a seqüência de página de código (COLLATE) estiver configurada como


MACHINE, cada caractere usa um byte. Caso contrário, cada caractere utiliza dois
bytes. Se um campo indexado suportar valores nulos (NULL), um byte adicional é
usado na chave de índice. Nota: os índices de seqüência não MACHINE são
sempre compactos.

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10
Tipos de Dados que podem ser armazenados

No Visual FoxPro podemos armazenar os seguintes tipos de dados em seu banco


de dados.

Tipo de campo Descrição Tamanho Intervalo

Double Um número de ponto 8 bytes +/–


flutuante de precisão 4.94065645841247E-
dupla 324 até +/–
8.9884656743115E307

Float Como o Numérico 8 bytes na – .9999999999E+19


memória; 1 a 20 até .9999999999E+20
bytes na tabela

General Refere-se a um objeto 4 bytes na tabela Limitado pela memória


OLE disponível

Int Valores inteiros 4 bytes –2147483647 até


2147483646

Int (AutoInc) Mesmo que Int, porém 4 bytes - 2147483647 até


seu valor é 2147483647
automaticamente
incrementado. É somente
leitura.

Memo Refere-se a um bloco de 4 bytes na tabela Limitado pela memória


dados. disponível

Caractere (Binário) Quaisquer dados de 1 byte por caractere Quaisquer caracteres


caracteres que você até 254
queira manter sem
alteração através das
páginas de códigos

Memo (Binário) Quaisquer dados do 4 bytes na tabela Limitado pela memória


campo Memo que você disponível
queira manter sem
alteração através das
páginas de códigos

Como o banco de dados é constituído

Um banco de dados do Visual FoxPro é constituído por vários elementos, os quais


estaremos detalhando logo a seguir.

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10
Diferentemente do MS Access ou do MS SQL Server o banco de dados do Visual
FoxPro não encapsula as tabelas dentro do mesmo arquivo do banco de dados.
Aqui as tabelas são armazenadas separadamente em arquivos do tipo DBF, sendo
que para cada tabela há um arquivo .dbf e ainda se a tabela possuir índices
compostos, um arquivo .cdx de mesmo nome da tabela. Há ainda a possibilidade de
criar índices não estruturais, ou seja, índices simples como aqueles utilizados no
dBase e no Clipper, sendo assim cada índice é armazenado em um arquivo com
extensão .idx.

O Database Container (Container de Banco de Dados), mais comumente conhecido


como DBC é a estrutura principal do banco de dados do Visual FoxPro. Ele é
constituído de três arquivos, a saber: um arquivo com extensão .dbc que é o arquivo
de banco de dados. Outro com extensão .dcx que é o arquivo de índice do banco de
dados e ainda um último com extensão .dct que é o arquivo MEMO do banco de
dados.

Dentro do DBC ficam armazenados os elementos virtuais de um banco de dados,


ou seja, aqueles que não possuem arquivos físicos no disco. São eles: Views
(locais e remotas), conexões e stored procedures (procedimentos armazenados).

Os nomes das tabelas, seus campos e demais atributos relacionados a cada campo
também ficam armazenados dentro do DBC.

Pessoas que já tiveram contato com outras linguagens que trabalham com o padrão
DBF para armazenamento de dados sabem o quanto esse padrão é prático e
flexível. Os DBFs do Visual FoxPro que fizerem parte de um banco de dados terão
algumas diferenças dos tradicionais DBF do FoxPro 2.x ou do Clipper. Em primeiro
lugar seu cabeçalho (header) de arquivo possui alguns bytes diferentes. Em
segundo lugar tanto o nome do DBF como seus campos poderão ser longos, acima
de 8 e 10 caracteres respectivamente.

A seguir estaremos conhecendo maiores detalhes a respeito dos elementos que


constituem um banco de dados Visual FoxPro.

Tabelas

É a estrutura fundamental de um sistema de gerenciamento de banco de


dados relacional. No Visual FoxPro, uma tabela armazena dados em
registros (linhas) e campos (colunas). Os dados são geralmente relativos a
uma categoria específica de coisas, como clientes, pedidos de clientes,
empregados ou peças em estoque. Cada tabela do Visual FoxPro pode ser
armazenada em seu próprio arquivo com a extensão .DBF ou pode estar
contida em um banco de dados.

Local Views (visualizações locais)

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10
Uma visualização permite extrair registros e campos específicos de uma ou
mais tabelas relacionadas e tratar o conjunto de dados resultantes como uma
tabela que pode ser atualizada. As visualizações são poderosas, o que
significa fornecer acesso personalizado para partes selecionadas de seu
banco de dados, combinando a flexibilidade de uma consulta à capacidade
de atualizar os dados.

Remote Views (visualizações remotas)

As visualizações remotas, assim como as locais, permitem extrair dados de


tabelas do banco de dados, manipulá-los e atualizá-los novamente no banco
de dados. No entanto, são projetadas para trabalhar com bancos de dados
remotos ou melhor dizendo em arquitetura cliente/servidor.

Connections (conexões)

Uma conexão é uma definição de uma fonte de dados armazenada em um


banco de dados, que você pode consultar por nome quando cria uma
visualização remota. Você também pode definir propriedades na conexão
definida para otimizar a comunicação entre o Visual FoxPro e a fonte de
dados remotos. Quando você ativa uma visualização remota, a conexão da
visualização se torna a canalização para a fonte de dados remota.

Stored Procedures (Procedimentos armazenados)

É um procedimento armazenado em um banco de dados. O procedimento


pode conter qualquer comando e função permitidos em uma função definida
pelo usuário. Em uma fonte de dados remotos, um conjunto de instruções
SQL armazenadas com um nome em qualquer banco de dados SQL.

Trigger (Disparador)

Código de evento em nível de registro que é executado após uma inserção,


atualização ou exclusão. Diferentes ações podem ser anexadas aos
diferentes eventos. Os disparadores são executados por último, depois das
regras, e não são executados durante atualizações que estejam utilizando
buffer, a menos que TABLEUPDATE() seja emitido. Eles são utilizados com
mais freqüência para integridade de tabelas de referência cruzada.

Agora que já conhecemos a definição dos elementos que podemos encontrar em


bancos de dados

A ferramenta Database Designer

Visando aumentar a produtividade do desenvolvedor, o Visual FoxPro sempre traz


juntamente com seus recursos, ferramentas para facilitar a utilização dos mesmos.

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10
No caso da criação de Bancos de Dados, temos a ferramenta Database Designer
que é bastante intuitiva e fácil de ser utilizada.

Procuraremos através deste texto demonstrar com objetividade e clareza a sua


utilização na construção de um banco de dados de exemplo e ainda conectar
recurso de um banco de dados remotos (um banco de dados do MS Access por
exemplo).

Podemos criar um banco de dados no Visual FoxPro por várias formas, por exemplo
acessando o menu File / New... ou através do gerenciador de projetos na aba Data
clicarmos em Databases e em seguida no botão New, ou ainda, na janela de
comandos digitarmos o comando CREATE DATABASE nomedobancodedados.

Particularmente acho a opção do gerenciador de projetos mais atraente uma vez


que o banco de dados já ficará incluso ali, não necessitando fazer sua inclusão
posterior. No entanto, haverá algum momento em que não queremos um projeto,
mas apenas um banco de dados. Sendo assim, podemos utilizar as outras opções.

Criando um novo banco de dados

Vamos criar então um projeto chamado aula-10.jpx e dentro dele vamos criar um
banco de dados chamado aula-10.dbc. Para isso:

1. Na janela de comandos digite CREATE PROJECT aula-10 e pressione a


tecla ENTER.

2. Clique sobre a aba Data e selecione o item Databases.

3. Clique sobre o botão New do gerenciador de projetos. Nesse momento você


será questionado sobre a forma como quer iniciar a criação do banco de
dados. Se através do Database Wizard ou um novo banco de dados (New
Database), conforme mostra a figura 10.1:

Figura 10.1 – New Database

4. Selecione New Database. Um novo diálogo será apresentado:

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10

Figura 10.2 – Salvando o novo banco de dados

5. No diálogo apresentado na figura 10.2, informe o nome do banco de dados e


depois clique em Save (Gravar/Salvar).

6. Nesse momento a janela do Database Designer já aparece vazia:

Figura 10.3 – Database Designer num banco vazio

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10
7. A partir de agora já podemos criar novas tabelas, adicionar tabelas
existentes, criar views, stored procedures etc.

Ao abrir o Database Designer geralmente a barra de ferramentas Database


Designer fica disponível. Caso isso não ocorra, você pode exibi-la através do
menu View / Toolbars e marcar Database Designer.

Figura 10.4 – Barra de ferramentas Database Designer

Através desta barra de ferramentas podemos realizar as seguintes operações:

New Table – criar uma nova tabela.

Add Table – adicionar uma tabela já existente.

Remove Table – remover uma tabela.

New Remote View – criar uma nova view (visualização) 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 conexões com bancos de dados.

A Ferramenta Table Designer

A fim de ajudar o desenvolvedor quanto à criação de suas tabelas para incluí-las


ao banco de dados, temos a ferramenta Table Designer.

Podemos adicionar a ferramenta Table Designer de algumas formas diferentes,


por exemplo, clicando com o botão direito do mouse sobre a área vazia do
banco de dados e escolhendo a opção New Table a partir do menu de contexto.

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10

Figura 10.5 – New Table, menu de contexto

Ou ainda a partir do gerenciador de projetos dentro da categoria


Data/Databases/Tables clicar sobre o botão New.

Figura 10.6 – New Table, gerenciador de projetos

Há ainda outras formas, mas com estas já temos condições de dar


prosseguimento ao nosso aprendizado.

Criando tabelas

Criar tabelas de bancos de dados no Visual FoxPro é um processo bastante


simples. Porém, antes de criarmos a tabela devemos ter planejado sua estrutura
para que os dados sejam consistentes e não haja redundância.

Inicialmente vamos criar uma tabela chamada Contatos, que utilizaremos para
cadastrar pessoas. Posteriormente, criaremos uma outra tabela chamada
Telefones. Segue a estrutura da tabela:

Estrutura da tabela Contatos


Campo Tipo Tamanho Índice
Id_contato Int (AutoInc) 4
NomeContato Character 40
Observação Memo 4

- Representa um índice de chave primária


- representa um índice regular

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10
Para criar nossa tabela, sigamos os seguintes passos:

1. Com o banco de dados aberto no Database Designer, clique sobre o botão


New Table da barra de ferramentas Database Designer.

Figura 10.7 – Diálogo New Table

2. No diálogo New Table, escolha o botão New Table. No diálogo Create,


coloque o nome da tabela: Contatos.

3. Após informar o nome da tabela, clique no botão Save (Salvar/Gravar).

4. Agora o diálogo Table Designer aparece, permitindo que possamos informar


os atributos da tabela.

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10

Figura 10.9 – Table Designer

Agora, estando no Table Designer o que precisamos fazer é informar os campos


que queremos criar e cada atributo para o campo. Observe na figura 10.9 o
painel à direita da lista de campos. Através destes campos podemos informar
alguns atributos que persistirão no momento de formatarmos nossos formulários
(telas), Grids, Browses (janelas de pesquisa tipo tabela), relatórios, etc.

Vamos conhecer os atributos e opções do Table Designer.

Na Figura 10.10 a seguir, temos os atributos obrigatórios para cada campo da


tabela:

Figura 10.10 – atributos obrigatórios para cada campo

Neste painel temos as seguintes colunas e seus significados:

Name – Nome do campo. Apesar do Visual FoxPro permitir campos longos com
espaços e acentos, evite-os. Você poderá ter problemas ao tentar acessar o
banco de dados a partir de outra forma de acesso como por exemplo um driver
ODBC, ADO, etc. Use nomes objetivos sem caracteres especiais. Utilize “_”
(traço underline) para separação de nomes, por exemplo “Nome_contato”.

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10
Type – Tipo do dado a ser armazenado no campo. Para maiores detalhes sobre
cada tipo do dado, consulte a tabela Tipos de Dados, no início deste capítulo.

Width – Determina a largura do campo em número de caracteres ou dígitos


numéricos.

Decimal – Determina a precisão numérica para casas decimais em dados do


tipo Numeric, Float e Double.

Index – Determina se o campo será um índice. Pode ser ainda ajusta para
ascendente e descendente. Uma seta para cima informa que a indexação será
em ordem ascendente. Uma seta para baixo informa o contrário.

NULL – Se marcado, informa que o campo poderá receber valores NULL.

Ao olharmos a figura 10.9 notamos alguns campos no painel à direita. Vejamos


agora qual é a utilidade de cada campo destes.

O painel Display

De acordo com a figura 10.11, temos um grupo chamado Display. As


informações deste grupo são relacionadas à exibição do campo.

Figura 10.11 – Opções de exibição

Format - A caixa Format pode ser utilizada para definir o formato padrão para o
campo, de acordo coma propriedade Format de objetos TextBox e EditBox. A
tabela a seguir lista os tipos de valores que podem ser usados para formatar
campos:

FORMATOS ACEITOS NA CAIXA E PROPRIEDADE FORMAT


Configuração Descrição
K Seleciona todo o texto quando um controle recebe o foco.
$ Exibe símbolo de moeda.
^ Exibe dados numéricos usando notação científica.
L Em campos numéricos exibem zeros à esquerda.
R Exibe o formato da mascara para o conteúdo do campo,
conforme máscara informada em Input mask, porém, só
armazena no campo os dígitos ou letras.
Z Exibe um campo número em braço, caso seu valor seja zero.
! Converte caracteres alfabéticos para maiúsculo.

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10
A Permite apenas caracteres alfabéticos
D Usa o formato especificado com o comando SET DATE para
datas.
E Edita valores Data em formato britânico (British).
T Remove conteúdo em branco antes e depois do texto.
YS Exibe valores Data conforme o formato curto configurado no
painel de controle do Windows.
YL Exibe valores Data conforme o formato longo configurado no
painel de controle do Windows.

A propriedade Format tem o mesmo significado da cláusula FUNCTION para os


comandos @... GET e @ ... EDIT, agora suportados apenas para
compatibilidade com versões anteriores.

Input Mask - Além da caixa Format, temos ainda a caixa Input Mask que
também equivale à propriedade Input Mask dos controles. Através desta caixa
podemos determinar qual será a máscara de entrada para um determinado
campo. Por exemplo, campos do tipo CEP, TELEFONE, CPF, CNPJ, etc.,
geralmente possuem máscaras de entrada para formatar segundo o padrão para
o tipo de campo. Quando utilizamos na propriedade Format a opção “R”,
estamos dizendo ao Visual FoxPro que queremos apresentar o campo conforme
a máscara personalizada, mas que deverá armazenar apenas os dígitos e letras.
Os demais caracteres de formatação não serão armazenados no campo.

Caption - A caixa Caption nos permite informar um título amigável para


apresentar ao usuário. Este Caption será utilizado nas nossas consultas através
de uma janela Browser, em Grids e ainda quando arrastamos nossos campos de
tabelas para nossos formuários e relatórios.

O painel Field Validation

Através deste painel podemos definir uma regra de validação para o campo e
ainda uma mensagem a ser exibida ao usuário.

Figura 10.12 – Painel Field Validation

Rule – através da caixa Rule define-se a regra de validação. Particularmente


não gosto de utilizar este tipo de validação pois a meu ver desencadeia-se um
monte de outros problemas menores quanto à inclusão de dados com comandos
xBase tradicionais como APPEND BLANK.

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10
Message – Determina a mensagem a ser exibida caso a regra (Rule) seja
violada.

O painel Map field type to classes

Através deste painel podemos definir que o campo que estamos definindo ao ser
adicionado em um formulário será exibido/editado dentro de uma determinada
classe que não seja a padrão. Minha opinião pessoal é que para usar classes
personalizadas a melhor opção ainda continua sendo através da aba Field
Mappings do diálogo Tools do Visual FoxPro.

Figura 10.13 – Painel Map field type do classes

O Painel FieldIncrement

Este painel só fica habilitado quando definirmos que um campo é do tipo Int
(AutoInc). Assim podemos definir as propriedades Next Value (próximo valor) e
também Step (Salto) que definirá de quanto em quanto será o salto do próximo
valor.

Figura 10.14 – Painel AutoIncrement

Agora que você já conhece as opções que podem ser definidas para cada
campo. Bem, então mãos à obra e crie a tabela Contatos conforme a estrutura
apresentada na tabela Estrutura da tabela contatos anteriormente neste capítulo.

Após informar todos os campos para a tabela Contatos o Table Designer deve
estar semelhante ao apresentado na figura 10.15 a seguir:

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10

Figura 10.15 – Estrutura da tabela Contatos.dbf

Uma vez definida a estrutura da tabela com os atributos de cada campo,


podemos então passar à aba Indexes para definir os índices da tabela, caso a
tabela venha a possuir chaves de índices. No caso da tabela Contatos.dbf temos
dois índices. O primeiro índice é o ID_Contato que será definido como chave
primária e servirá como um identificador único dentro de toda a tabela, ou seja,
não poderá haver repetição. O outro índice servirá para ordenar os contatos
alfabeticamente, facilitando a visualização dos mesmos. No caso a chave será o
campo NomeContato.

A importância dos índices para as tabelas vai muito além de simplesmente


permitir que o resultado de uma consulta seja ordenada por este ou aquele
campo. Serve também como otimizador de performance para as buscas, é
também imprescindível nos relacionamentos entre tabelas para que haja melhor
normalização dos dados.

A seguir, vamos conferir as definições de índices para a tabela Contatos e fazer


algum possível ajuste caso necessário.

É importante lembrar que para definir os índices para uma tabela, a mesma
precisa estar aberta em modo exclusivo, ou seja, não pode estar compartilhada
com outros usuários na rede. Para tal, basta incluirmos a cláusula EXCLUSIVE
no comando USE quando formos abrir a tabela.

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10
No momento isso não é necessário visto que quando estamos criando uma
tabela, ela já se encontra em modo exclusivo.

Definindo os índices da tabela

Para expressões de índices simples, podemos defini-los na própria Fields, na


coluna Index. Para escolhermos para definir um índice em ordem crescente e
para defini-lo como decrescente.

Expressões de índices compostas por mais de um campo devem ser definidas


na aba Indexes do Table Designer ou através do comando INDEX do Visual
FoxPro.

Tipos de índices

Antes de criarmos os índices para a tabela Contatos, vamos saber um pouco


sobre os tipos de índices do banco de dados do Visual FoxPro.

Temos três tipos de índices, a saber:

Primary – Índice de chave primária. Isso significa que o campo com este tipo de
índice nunca poderá ter um valor repetido e portanto será utilizado como um
identificar único para o banco de dados. Geralmente utilizado para determinar
relacionamentos na tabela do lado um de um relacionamento um-para-muitos.

Candidate – É um índice semelhante ao de chave primária, porém é apenas


candidato a ser chave primária. Seu valor também nunca pode ser repetido.

Regular – É o índice mais comum. Pode ser utilizado tanto para fins apenas de
ordenar a tabela assim como também para relacionar dados de uma tabela filha
com uma tabela pai num relacionamento do tipo um-para-muitos.

Criando os índices da tabela contatos

Na verdade os índices já foram criados no momento que marcamos na coluna


Index da definição do campo. No entanto ainda não definimos o tipo do índice e
a princípio todos os índices são criados como Regular.

1. Clique sobre a aba Indexes do Table Designer.

2. Vá até o índice ID_CONTATO e mude o Type para Primary. Isso fará com
que ID_CONTATO passe a ser um índice do tipo primário. O resultado
deverá algo semelhante ao que mostra a figura 10.16 a seguir:

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10

Figura 10.16 – Índices da tabela Contatos.

Pronto! Índices definidos!

Mais algumas coisas sobre índices

De acordo com a figura 10.16 temos algumas colunas na aba de definição de


índices. Veremos para que serve cada uma destas colunas:

- através deste controle é possível mudar a ordem da marca de índice,


movendo-o para cima ou para baixo.

Order – permite definir se a ordem do índice é crescente (ascendente) ou


decrescente (descendente).

Type – define o tipo do índice: primário, candidato ou regular.

Expression – aqui definimos a expressão a ser indexada. Quando estamos


definindo um índice simples, de expressão única, geralmente utilizamos o nome
do campo como expressão. Quando o índice é composto, ou seja, a expressão é
composta por mais de um campo, simplesmente informamos o nome do primeiro
campo, um sinal de + e então a segunda expressão e assim sucessivamente.
Exemplo de expressão composta: ID_CONTATO + NOMECONTATO. É
importante lembrar que numa expressão composta os dois campos precisam ser
do mesmo tipo, caro contrário vai ocorrer um erro por tipo de dados
incompatíveis. Quando houver necessidade de constituir uma expressão
composta com tipos diferentes, precisamos fazer a conversão do tipo diferente
para o mesmo tipo. Podemos fazer isso através das funções de conversão de
tipos de dados do Visual FoxPro.

Filter – através deste campo podemos definir uma expressão de filtro. Por
exemplo NomeContato = “A”. Se assim definirmos, ao determinar a ordem por
este índice, apenas os nomes de contatos iniciados em “A” aparecerão na
consulta.

Collate – especifica uma seqüência de ordenação de acordo com as opções


disponíveis no Visual FoxPro. Uma seqüência diferente de MACHINE reservará
dois bytes para cada caractere no índice.

É importante ter em mente que o nome do índice pode ter apenas 10 catacteres.
Isso nos obriga a ser mais cautelosos na hora de definir índices para campos de

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10
nomes longos. Por exemplo alguns programadores costumam criar campos
onde primeiro colocam o nome da tabela seguidos de _nomedocampo. Por
exemplo: fornecedores_nome, fornecedores_cnpj, etc. Ao definir um índice para
um campo como este a primeira coisa que temos que fazer é mudar o nome do
índice, pois como a palavra fornecedores possui mais de 10 caracteres
conseqüentemente vamos ter índices truncados e não vamos chegar ao objetivo
final. Por isso, cuidado ao nomear os índices de suas tabelas.

Outras opções para a tabela

Além dos campos e índices, podemos definir mais alguns atributos para a
tabela. A aba Table, do Table Designer mostra o que podemos definir:

Figura 10.17 – Outros atributos para a tabela

Veja na figura acima que temos algumas opções por exemplo, Name, Record
Validation, Triggers e Table Comment.

Record Validation é utilizado para fazer validações a nível de registro. Minha


opinião pessoal é que este recurso só funciona em pouquíssimos casos.
Geralmente poderá entrar em atrito com regras definidas na aplicação.

Triggers são utilizados para disparar ações ou Stored Procedures


(procedimentos armazenados) no momento de uma inserção, atualização ou
remoção de registro na tabela. Muito útil para a criação de rotinas de logs no
banco de dados.

Copyright © 2004 – Fox Total Network – Todos os direitos reservados


A U L A

10
Sugestão de exercício

Como exercício, criar uma tabela chamada FormasContato.dbf com a seguinte


estrutura:

Campo Tipo Tamanho Índice


Id_contato Int 4
TipoContato Character 15
NumeroContato Character 12
Observação Memo 4

Copyright © 2004 – Fox Total Network – Todos os direitos reservados

Você também pode gostar