Você está na página 1de 5

BDE com Paradox

Configurando o BDE para um banco de dados Paradox


Voc alguma vez j escreveu um programa Delphi que usa tabelas Paradox locais, e recebeu mensagens de erro,
tais como, "Not initialized for network access" ou "Directory is busy"? Voc j configurou um programa multi-usurio e
descobriu que o usurio A no via as mudanas dos bancos de dados feitas pelo usurio B? O segredo para evitar
esses problemas certamente a configurao do Borland Database Engine(BDE).
Primeiramente, vamos configurar o diretrio Paradox na rede. Execute o BDE Administrator que acompanha o Delphi
3 ou 4, selecione a pgina Configuration e em Drivers | Native clique no Driver Paradox para ver as opes de
configurao, conforme mostrada na figura 1.
NET DIR
Se seu programa acessar arquivos num drive compartilhado da rede, voc tem que configurar o parmetro NET DIR,
que o path para o diretrio que contm o arquivo de controle do Paradox em rede, nomeado PDOXUSRS.NET.
As regras seguintes aplicam-se para o path do NET DIR:
Ter que apontar para um diretrio compartilhado na rede;
Usurios que vo acessar as tabelas Paradox tero que ter direito de ler, escrever, criar, e deletar neste diretrio. O
arquivo PDOXUSRS.NET ser criado automaticamente pelo BDE;
Usurios que acessaro simultaneamente as tabelas Paradox num diretrio devem usar o mesmo diretrio de
arquivo de controle em rede.
O path do NET DIR deve ser o mesmo para todos os usurios;
Se voc estiver configurando o BDE para uma rede peer-to-peer (ponto a ponto), h uma exceo para esta ltima
regra: Como voc controla a rede peer-to-peer dependendo da verso do BDE que voc est utilizando(16 ou 32
bits)? Vamos analisar primeiro um caso mais fcil. O BDE de 32-bit suporta o arquivos de nome UNC, ento fcil
providenciar um path para o NET DIR que fique igual para todas as mquinas. O formato de um path UNC :
\\NomeServidor\ShareName\ShareDir
onde o NomeServidor o nome da mquina em que o NET DIR vai residir, ShareName o nome atribudo para o
diretrio compartilhado na rede, e ShareDir o path para um diretrio abaixo do diretrio 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 mquinas, com uma exceo: a
configurao do drive pode ser diferente. Por exemplo, suponha que o diretrio do arquivo de controle em rede seja
C:\NETDIR no servidor. Em todas as outras mquinas, o drive C: do servidor mapeado para o drive G : Portanto, a
configurao do NET DIR para essas mquinas deve ser G:\NETDIR
Voc pode via programao fazer a configurao do NET DIR no arquivo de configurao do BDE em tempo de
execuo, configurando a propriedade Session.NetFileDir. Por exemplo:
Session.NetFileDir := G:\BDENET ;
isso configurar o diretrio do arquivo de controle para o diretrio G:\BDENET. Se voc precisar mudar o diretrio do
arquivo de controle no seu programa, faa isso no arquivo de projeto (.DPR) antes de qualquer formulrio ser aberto,
ou no evento OnCreatedo formulrio principal antes de qualquer tabela ser aberta. Se voc configurar o diretrio do
arquivo de controle na rede na unit principal , ou no arquivo de projeto, lembre-se de incluir a unidade DB na
clusula uses .

Figura 1: Parmetros de configurao do driver Paradox no BDE
LEVEL
A estrutura interna das tabelas Paradox tem mudado muitas vezes no decorrer desses anos; o parmetro LEVEL
determina a verso de tabela mais baixa (velha) que o BDE criar. A configurao default 4, que o primeiro
formato introduzido com o Paradox 4.0 para DOS (e subseqentemente usado pelo Paradox 4.5 para DOS , Paradox
1.0 para Windows, e Paradox 4.5 para Windows). Tabelas de nvel 5 foram introduzidas no Paradox 5.0 para
Windows, e tabelas de nvel 7 so sustentadas pelo Paradox 7.0 para Windows 95/98 e Windows NT, e Paradox 7
para Windows 3.1 . Voc pode usar tambm a configurao de nvel de tabela para 3 se voc precisar criar tabelas
que podem ser acessadas pelo Paradox 3.5 para DOS ou verses mais recentes.
O nvel de qualquer tabela que voc criar ser determinada pela caracterstica da mesma. Vamos dizer que o nvel
da tabela no arquivo de configurao 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 nvel 5. Se voc usar ndices nico ou secundrios descendentes, o BDE criar automa-ticamente uma
tabela de nvel 7. Voc pode deixar tambm o nvel de tabela defaut configurada para 4 (o default) para uma mxima
compatibilidade. Voc no ter uma performance melhor - ou qualquer outra vantagem - usando um nvel de tabela
superior tabela ou uma estrutura de ndice exigida.
TYPE
O arquivo de parmetro TYPE configurado automaticamente pelo BDE; voc no deve mud-lo. Os nicos dois
valores vlidos so FILE , usado pelo Paradox e tabelas DBase, e a SERVER, que usado por qualquer servidor de
bancos de dados.
LANGDRIVER
Essa configurao seleciona a linguagem do driver usada pela suas tabelas e ndices. A linguagem do driver
determina que lngua especfica de caracteres podem ser armazenados nas tabelas e em qual tipo de ordem usada
para construir ndices.
O caractere padro do Paradox configurado segue o tipo de ordem ASCII , que separa "a" depois de "Z" isto ,
caracteres minsculos seguem os maisculos. Se voc quiser "A" e "a" para serem separados adjacentes (entre
eles), voc deve considerar a mudana do drive de linguagem para o Paradox Internacional. Se fizer, embora fique
avisado que, sem reconstruir todos os ndices - um usurio Paradox com uma linguagem de driver diferente no ser
capaz de usar tabelas que voc cria.
BLOCK SIZE
A quantia mxima de dados que uma tabela Paradox suporta 64KB vezes o tamanho do bloco. O default do
parmetro 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 so 1024, 2048, e 4096. Para o Level 5
e superior, voc pode tambm 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 configurao do BDE, todas as tabelas que voc criar depois de
fazer as mudanas tero 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 contm o registro, voc no deve fazer o block size maior
do que necessrio para conter os dados.

Figura 2: Voc precisa alterar a configurao default do Local Share
FILL FACTOR
O FILL FACTOR determina o quo 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 construdo, ou
quando for reconstrudo como parte de organizar uma tabela, cada bloco de ndice ter aproximadamente 5 % de
todo seu espao vazio.
Quando voc adicionar um novo registro para uma tabela, a entrada do registro deve ser feita em cada ndice da
tabela. Tendo espao livre no bloco de ndice, significa que menos provvel que o bloco afetado esteja cheio;
portanto, adicionar o novo registro ser mais rpido.
Apesar do FILL FACTOR poder ser configurado em qualquer porcentagem, deixando muito espao 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 no suportam integridade
referencial (tal como Paradox para DOS) no sero 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 cdigo para forar a integridade
referencial em seu Paradox para a aplicao 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, no seja a nica situao onde a trava requerida para assegurar a integridade dos
seus dados. Se voc executar mltiplos programas que simultaneamente acessem as mesmas tabelas no seu drive
local, voc precisa travar para prevenir um programa da mudana de um registro j em uso por outro.
A Figura 2 mostra as configuraes de System | Init do BDE Administrator. Por default, o parmetro LOCAL SHARE
configurado para False. Se voc executar mltiplos programas que acessem as mesmas tabelas, voc deve
configurar LOCAL SHARE paraTrue 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 verso do BDE. Se voc estiver executando uma
aplicao multi-usurio numa rede peer to peer voc deve ter tambm 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
estao est executando a sua prpria cpia do BDE.
PRIVATE DIRECTORY
Se voc programador que usa Paradox, ficar surpreso ao aprender que as regras que governam o uso do diretrio
privado so muito diferentes no Delphi do que no Paradox. O Paradox cria arquivos temporariamente com nomes
fixos no seu diretrio privado. Exemplos incluem ANSWER.DB, CHANGED.DB, DELETED.DB e KEYVIOL.DB. Por
que essas tabelas temporrias mostram o mesmo nome para cada usurio e para cada instncia Paradox, cada
usurio e cada sesso deve ter seu prprio diretrio privado. Quando duas instncias de Paradox esto executando
na mesma mquina, isto assegura que 2 sesses de Paradox no tentaro criar uma tabela com um mesmo nome
num mesmo diretrio ao mesmo tempo.
Embora o BDE tambm crie arquivos temporrios no diretrio 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 temporrio. Portanto, seguro para mltiplos
programas de Delphi executando na mesma mquina, ao mesmo tempo, para um mesmo usurio, para o mesmo
diretrio privado com tanto que o programa no crie arquivos com nomes fixos num diretrio privado.
function GetExeName: string;
{ Retorna o nome do arquivo .EXE
sem o Path e a extenso }
var
ExtPos : Integer;
Name, Ext : String;
begin
Name := ExtractFileName(Application.Exename);
Ext := ExtractFileExt(Application.ExeName);
{Procura onde a extenso comea no nome}
ExtPos := Pos(Ext, Name);
{ Extrai o nome sem a extenso. }
if ExtPos > 0 then
Name := Copy(Name, 1, ExtPos-1);
Result := Name;
end; { GetExeName. }
Figura 3: Uma funo para retornar o nome do arquivo EXE
Se mltiplos usurios executarem o mesmo programa numa rede, e se o BDE precisar criar arquivos temporrios
enquanto o programa executa, voc precisar nomear um diretrio privado separado para cada usurio.
Quando voc inicia um programa de banco de dados Delphi, isso abre a sesso default do BDE e configura o
diretrio privado para o diretrio startup, o qual ser identificado no campo Iniciar do cone do programa no Windows
desktop.
Se nenhum for especificado, o diretrio startup ser aquele que contm o arquivo .EXE. Embora, o BDE no crie
arquivo de lock no diretrio privado, at que o BDE necessite do diretrio privado para criar um arquivo temporrio,
ou voc configura a path para o diretrio privado de dentro do seu programa nomeando uma path para a
propriedade Session. PrivateDir .
Por que o diretrio privado no est travado quando o programa inicia, sendo possvel 2 usurios diferentes iniciarem
o mesmo programa e compartilhar o mesmo diretrio privado. Embora, o BDE necessite criar um arquivo temporrio,
isso travar o diretrio privado para aquele usurio. Se outra cpia do BDE precisar criar um arquivo temporrio,
aquele usurio receber uma exceo de aviso "Directory is busy".
Isso bom; os programas Client/Server que no fazem junes heterogneas, no tendo que se preocupar sobre
diretrio privado, por que o BDE no ter que criar qualquer arquivo temporrio.
Mas, se voc estiver executando um programa que use uma tabela Paradox e muitos usurios compartilhando de um
nica cpia do programa no drive de rede compartilhado, voc vai ter problemas . Se cada usurio estiver
executando a mesma cpia do .EXE , ento cada usurio ter o mesmo diretrio privado - a menos que voc
especifique o diretrio startup para cada usurio ou mude o diretrio privado no seu cdigo assim que o programa
iniciar.
A melhor soluo para esse problema ter cada programa Delphi configurado no diretrio privado para um diretrio
nico quando iniciado. Uma maneira para fazer isso criar um subdiretrio com o mesmo nome do arquivo .EXE, da
coloque isso no seu drive local.
A funo mostrada na figura 3 volta o nome do arquivo .EXE com o path e extenso removida . Figura 4 mostra um
procedimento que cria um diretrio privado.
Usando essas rotinas, voc pode configurar o diretrio privado de dentro do seu programa:
SetPrivateDir(c:\bdepriv\+GetExeName);
Essa instruo cria um diretrio como um subdiretrio no diretrio C:\BDEPRIV, mantendo todos os diretrios de
preferncia em uma localizao ao longo do diretrio raiz no seu drive local.
Alternadamente , voc pode criar diretrios privados abaixo do diretrio de cada usurio na rede. Embora a
performance seja melhor se o diretrio privado estiver num HD local, a rede uma escolha melhor se alguns usurios
tem o espao do HD limitado.
Por que h sempre muitas excees, uma boa idia fornecer uma maneira para o path do diretrio privado default
para ser levado em conta.
Voc pode fazer isso com um arquivo .INI, no Registry, ou um comando de parmetro de linha opcional para seu
programa. Usando uma dessas tcnicas fica fcil manipular um caso excepcional em, que um usurio precisa de um
diretrio privado num lugar no padronizado.
procedure SetPrivateDir(DirPath: String);
{ Cria um diretrio especfico se no existir
e faz dele um diretrio privado }
begin
ForceDirectories(DirPath);
if DirectoryExists(DirPath) then
Session.PrivateDir := DirPath
else
raise Exception.Create(O diretrio privado + DirPath + no pode ser criado);
end; { SetPrivateDir }
Figura 4: Use a procedure SetPrivateDir para criar um diretrio privado.
Concluso
Se seu programa Delphi usar o BDE, voc deve configur-lo corretamente , para um diretrio privado nico para cada
usurio e para cada programa. Isso permite multiusurios em segurana e operaes de multitarefas.
Configurando o BDE corretamente permitir mltiplos programas para compartilhar seguramente os dados na rede
ou drives locais.