BDE com Paradox
Configurando o BDE para um banco de dados Paradox· O path do NET DIR deve ser o mesmo para todos os usuários;
Se você estiver configurando o BDE para uma rede peer-to-peer (ponto a ponto), há uma exceção para esta última regra: Como você controla a rede peer-to-peer dependendo da versão do BDE que você está utilizando(16 ou 32 bits)? Vamos analisar primeiro um caso mais fácil. O BDE de 32-bit suporta o arquivos de nome UNC, então é fácil providenciar um path para o NET DIR que fique igual para todas as máquinas. O formato de um path UNC é:
\\NomeServidor\ShareName\ShareDir
onde o NomeServidor é o nome da máquina em que o NET DIR vai residir, ShareName é o nome atribuído para o diretório compartilhado na rede, e ShareDir é o path para um diretório abaixo do diretório compartilhado como ShareName. Usando UNC, o path do NET DIR será o mesmo em todas as maquinas, incluindo o servidor. Veja abaixo um exemplo de path UNC:
\\Servidor1\C\DiretorioTheClub
Com o BDE de 16-bit, você deve usar a mesma path do NET DIR em todas as máquinas, com uma exceção: a configuração do drive pode ser diferente. Por exemplo, suponha que o diretório do arquivo de controle em rede seja C:\NETDIR no servidor. Em todas as outras máquinas, o drive C: do servidor é mapeado para o drive G : Portanto, a configuração do NET DIR para essas máquinas deve ser G:\NETDIR
Você pode via programação fazer a configuração do NET DIR no arquivo de configuração do BDE em tempo de execução, configurando a propriedade Session.NetFileDir. Por exemplo:
Session.NetFileDir := ‘G:\BDENET ‘;
isso configurará o diretório do arquivo de controle para o diretório
G:\BDENET. Se você precisar mudar o diretório do arquivo de controle no seu
programa, faça isso no arquivo de projeto (.DPR) antes de qualquer formulário
ser aberto, ou no evento OnCreate do formulário principal antes de
qualquer tabela ser aberta. Se você configurar o diretório do arquivo de
controle na rede na unit principal , ou no arquivo de projeto, lembre-se de
incluir a unidade DB na cláusula uses.

Figura 1: Parâmetros de configuração do driver Paradox no BDE
LEVEL
A estrutura interna das tabelas Paradox tem mudado muitas vezes no decorrer desses anos; o parâmetro LEVEL determina a versão de tabela mais baixa (velha) que o BDE criará. A configuração default é 4, que é o primeiro formato introduzido com o Paradox 4.0 para DOS (e subseqüentemente usado pelo Paradox 4.5 para DOS , Paradox 1.0 para Windows, e Paradox 4.5 para Windows). Tabelas de nível 5 foram introduzidas no Paradox 5.0 para Windows, e tabelas de nível 7 são sustentadas pelo Paradox 7.0 para Windows 95/98 e Windows NT, e Paradox 7 para Windows 3.1 . Você pode usar também a configuração de nível de tabela para 3 se você precisar criar tabelas que podem ser acessadas pelo Paradox 3.5 para DOS ou versões mais recentes.
O nível de qualquer tabela que você criar será determinada pela característica da mesma. Vamos dizer que o nível da tabela no arquivo de configuração do BDE seja configurada para 4. Se você criar uma tabela que use o tipo de campo long integer, ou qualquer tipo de campo adicionado no Paradox 5.0, o BDE criará automaticamente uma tabela de nível 5. Se você usar índices único ou secundários descendentes, o BDE criará automa-ticamente uma tabela de nível 7. Você pode deixar também o nível de tabela defaut configurada para 4 (o default) para uma máxima compatibilidade. Você não terá uma performance melhor - ou qualquer outra vantagem - usando um nível de tabela superior à tabela ou uma estrutura de índice exigida.
TYPE
O arquivo de parâmetro TYPE é configurado automaticamente pelo BDE; você não
deve mudá-lo. Os únicos dois valores válidos são FILE , usado pelo Paradox e
tabelas DBase, e a SERVER, que é usado por qualquer servidor de bancos de
dados.
LANGDRIVER
Essa configuração seleciona a linguagem do driver usada pela suas tabelas e
índices. A linguagem do driver determina que língua específica de caracteres
podem ser armazenados nas tabelas e em qual tipo de ordem é usada para construir
índices.
O caractere padrão do Paradox configurado segue o tipo de ordem ASCII , que
separa "a" depois de "Z" isto é, caracteres minúsculos seguem os maiúsculos. Se
você quiser "A" e "a" para serem separados adjacentes (entre eles), você deve
considerar a mudança do drive de linguagem para o Paradox Internacional. Se
fizer, embora fique avisado que, sem reconstruir todos os índices - um usuário
Paradox com uma linguagem de driver diferente não será capaz de usar tabelas que
você cria.
BLOCK SIZE
A quantia máxima de dados que uma tabela Paradox suporta é 64KB vezes o
tamanho do bloco. O default do parâmetro BLOCK SIZE é de 2048 bytes, sendo assim
qualquer tabela Paradox que você cria é limitada em 128MB em tamanho. O tamanho
de bloco permitido para as tabelas com Level 3 e 4 são 1024, 2048, e
4096. Para o Level 5 e superior, você pode também especificar um tamanho
de bloco de 8192, 16384, ou 32768. O tamanho default, contudo, ainda é 2048.
Se você mudar o tamanho do bloco no arquivo de configuração do BDE, todas as tabelas que você criar depois de fazer as mudanças terão um novo block size. Para mudar o block size de uma tabela existente, primeiro mude o block size no BDE Administrator, depois copie ou recrie a estrutura da tabela. Por que lendo ou escrevendo um registro simples significa ler ou escrever todo um bloco que contém o registro, você não deve fazer o block size maior do que é necessário para conter os dados.

Figura 2: Você precisa alterar a configuração default do Local Share
FILL FACTOR
O FILL FACTOR determina o quão cheio um bloco de índices deve estar antes que
o Paradox aloque outro bloco quando estiver construindo o índice. O default é de
95%. Isso significa que o índice é inicialmente construído, ou quando for
reconstruído como parte de organizar uma tabela, cada bloco de índice terá
aproximadamente 5 % de todo seu espaço vazio.
Quando você adicionar um novo registro para uma tabela, a entrada do registro deve ser feita em cada índice da tabela. Tendo espaço livre no bloco de índice, significa que é menos provável que o bloco afetado esteja cheio; portanto, adicionar o novo registro será mais rápido.
Apesar do FILL FACTOR poder ser configurado em qualquer porcentagem, deixando
muito espaço livre nos blocos de índices o índice será maior. Se o índice for
maior, mais blocos de índices devem ser lidos quando você procurar por um
registro, diminuindo a performance.
STRICTINTEGRTY
Se STRICTINTEGRTY (Strict Integrity) for configurado para TRUE, os
programas que não suportam integridade referencial (tal como Paradox para DOS)
não serão capazes de modificar qualquer tabela para cada integridade referencial
que for definida. Para modificar uma tabela Paradox para DOS, configure
STRICTINTEGRTY to False. Se você fizer assim, e quiser proteger a
integridade dos dados, você deve escrever o código para forçar a integridade
referencial em seu Paradox para a aplicação do DOS.
LOCAL SHARE
O BDE automaticamente cuida das tabelas e registros travando-os para
as tabelas Paradox armazenadas no drive da rede compartilhado. Embora, não seja
a única situação onde a trava é requerida para assegurar a integridade dos seus
dados. Se você executar múltiplos programas que simultaneamente acessem as
mesmas tabelas no seu drive local, você precisa travar para
prevenir um programa da mudança de um registro já em uso por outro.
A Figura 2 mostra as configurações de System | Init do BDE
Administrator. Por default, o parâmetro LOCAL SHARE é configurado para
False. Se você executar múltiplos programas que acessem as mesmas
tabelas, você deve configurar LOCAL SHARE para True para o BDE
providenciar uma trava, mesmo que as tabelas estejam no seu drive local, a menos
que todos os programas estejam usando as mesma versão do BDE. Se você estiver
executando uma aplicação multi-usuário numa rede peer to peer você deve
ter também LOCAL SHARE configurado para True. Isso por que o BDE
"vê" o drive no servidor como um drive local mais do que um drive em rede
compartilhado, e em cada estação está executando a sua própria cópia do
BDE.
PRIVATE DIRECTORY
Se você é programador que usa Paradox, ficará surpreso ao aprender que as
regras que governam o uso do diretório privado são muito diferentes no Delphi do
que no Paradox. O Paradox cria arquivos temporariamente com nomes fixos no seu
diretório privado. Exemplos incluem ANSWER.DB, CHANGED.DB, DELETED.DB e
KEYVIOL.DB. Por que essas tabelas temporárias mostram o mesmo nome para cada
usuário e para cada instância Paradox, cada usuário e cada sessão deve ter seu
próprio diretório privado. Quando duas instâncias de Paradox estão executando na
mesma máquina, isto assegura que 2 sessões de Paradox não tentarão criar uma
tabela com um mesmo nome num mesmo diretório ao mesmo tempo.
Embora o BDE também crie arquivos temporários no diretório privado quando filtrando com Query, pesquisando, reestruturando tabelas Paradox e dBASE e quando apresentando uma query que une tabelas em 2 diferentes servidores, o BDE cria arquivo de nome único para seu arquivo temporário. Portanto, é seguro para múltiplos programas de Delphi executando na mesma máquina, ao mesmo tempo, para um mesmo usuário, para o mesmo diretório privado com tanto que o programa não crie arquivos com nomes fixos num diretório privado.
function GetExeName: string;Figura 3: Uma função para retornar o nome do arquivo EXE
{ Retorna o nome do arquivo .EXE
sem o Path e a extensão }
var
ExtPos : Integer;
Name, Ext : String;
begin
Name := ExtractFileName(Application.Exename);
Ext := ExtractFileExt(Application.ExeName);
{Procura onde a extensão começa no nome}
ExtPos := Pos(Ext, Name);
{ Extrai o nome sem a extensão. }
if ExtPos > 0 then
Name := Copy(Name, 1, ExtPos-1);
Result := Name;
end; { GetExeName. }
SetPrivateDir(c:\bdepriv\’+GetExeName);Essa instrução cria um diretório como um subdiretório no diretório C:\BDEPRIV, mantendo todos os diretórios de preferência em uma localização ao longo do diretório raiz no seu drive local.
Você pode fazer isso com um arquivo .INI, no Registry, ou um comando de
parâmetro de linha opcional para seu programa. Usando uma dessas técnicas fica
fácil manipular um caso excepcional em, que um usuário precisa de um diretório
privado num lugar não padronizado.
procedure SetPrivateDir(DirPath: String);Figura 4: Use a procedure SetPrivateDir para criar um diretório privado.
{ Cria um diretório específico se não existir
e faz dele um diretório privado }
begin
ForceDirectories(DirPath);
if DirectoryExists(DirPath) then
Session.PrivateDir := DirPath
else
raise Exception.Create(‘O diretório privado ‘+ DirPath + ‘ não pode ser criado’);
end; { SetPrivateDir }
Configurando o BDE corretamente permitirá múltiplos programas para
compartilhar seguramente os dados na rede ou drives locais.