Escolar Documentos
Profissional Documentos
Cultura Documentos
Agora pois, quanto à eficácia, com certeza os sistemas SGDBs mais modernos são
infinitamente melhores que simples arquivos texto ou planilhas.
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.
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
10
Tipos de Dados que podem ser armazenados
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.
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.
Tabelas
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.
Connections (conexões)
Trigger (Disparador)
10
No caso da criação de Bancos de Dados, temos a ferramenta Database Designer
que é bastante intuitiva e fácil de ser utilizada.
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.
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:
10
10
7. A partir de agora já podemos criar novas tabelas, adicionar tabelas
existentes, criar views, stored procedures etc.
10
Criando tabelas
Inicialmente vamos criar uma tabela chamada Contatos, que utilizaremos para
cadastrar pessoas. Posteriormente, criaremos uma outra tabela chamada
Telefones. Segue a estrutura da tabela:
10
Para criar nossa tabela, sigamos os seguintes passos:
10
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”.
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.
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.
O painel Display
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:
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.
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.
Através deste painel podemos definir uma regra de validação para o campo e
ainda uma mensagem a ser exibida ao usuário.
10
Message – Determina a mensagem a ser exibida caso a regra (Rule) seja
violada.
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.
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.
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:
10
É 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.
10
No momento isso não é necessário visto que quando estamos criando uma
tabela, ela já se encontra em modo exclusivo.
Tipos de índices
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.
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.
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:
10
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.
É 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
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.
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:
Veja na figura acima que temos algumas opções por exemplo, Name, Record
Validation, Triggers e Table Comment.
10
Sugestão de exercício