Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.
BDE Parte II: Cliente/Servidor
Continuando a série sobre os problemas encontrados na BDE, damos ênfase aos bugs relacionados com o link para banco de dados cliente-servidores. Na edição passada vimos as inconsistências no acesso a arquivos Access, Paradox e DBase. Finalizamos aqui com Oracle, SQL Server e DB2. Acompanhe os relatos a seguir e previna-se contra estas surpresas:
MS SQL Server
Na versão 7.0 deste banco de dados, alguns números com duas casas decimais são armazenados incorretamente. Por exemplo:
Os valores: 40,40 40,6969
São armazenados como: 40,3999 e 40,69689
Campos Memo
Em alguns casos, a inserção de dados em campos do tipo Text(Memo), gera o erro ‘operand type clash: var binary is incompatible with text’, se houver o uso de CachedUpdates.
Cláusula Constraint
Se você possuir uma tabela com uma chave primária auto-incrementável e o segundo campo for uma Constraint Default, o BDE irá gerar o erro: ‘NonBlob column in Table Required to preform operation’, quando um registro for inserido nesta tabela. Um erro muito parecido ocorre em situação semelhante em um banco de dados Sybase.
CamposBlob
Se o usuário for ao último registro de uma tabela que não possua um índice Unique, mas que possua um campo Blob, os dados do campo Blob serão gerados com ruído.
Interbase
Campos do tipo Data
Os milésimos de segundo de uma data não são processados pelo BDE. Ou seja, ao gravar ou ler um campo data, os milésimos de segundo sempre são retornados como 0. Este erro também ocorre em tabelas Oracle.
Dicionários de dados
A criação de dicionários no Interbase é extremamente mais lenta do que em outros servidores, mesmo que a estrutura do dicionário de dados seja a mesma.
Sybase
Campos Money
Se duas aplicações BDE estiverem abertas, e a segunda aplicação for fechada, o BDE irá gerar o erro: ‘Translate Error: Value out of Bounds’, caso haja uma tabela aberta com algum campo do tipo Money uo Small Datetime.
Blob
O BDE irá falhar ao tentar retornar um registro que tenha um campo Blob com mais de 96k.
Propriedade RequestLive
Quando esta propriedade estiver setada para True, a Query sempre será CaseSensitive, mesmo que o servidor não esteja configurado para isto. Este problema também ocorre no MS SQL Server.
Stored Procedures
Quando forem executadas Stored Procedures, o valor de retorno da procedure executada nunca é retornado ao parâmetro RESULT do objeto TStoredProc, se o código possuir uma cláusula Raise Error. Por exemplo, veja a procedure abaixo:
Raise error 5000 "Testando"
Return 10
Insira um objeto TStoredProc e conecte-o a Procedure referente. Tente o código abaixo:
try
TStoreProd1ExeProc;
except
end;
ShowMessage (TStoredProc1.
ParamByName (‘Result’).
asString);
O retorno sempre será igual a 0.
Oracle 8
O BDE falha ao tentar retornar um campo do Tipo Blob de uma tabela criada no Oracle 8 Client.
Campos Numéricos
Se o parâmetro BCD não estiver ativo, ao entrar com determinados números em um campo Number, algumas casas podem ser perdidas.
Um erro também é encontrado caso um valor 0 (zero) seja inserido em um campo do tipo Number (1,2).
Alguns números também apresentam problemas ao serem gravados. Por exemplo, se o usuário tentar inserir o número 7,777,777,777 em um campo Float, o erro ‘Record changed by another user’ será gerado.
Stored Procedures
Se você abrir a propriedade Params do objeto TStoredProc, em uma procedure com mais de 11 parâmetros, o Delphi será abortado.
Rowid
Não é possível visualiza o conteúdo as colunas Rowid em uma tabela Oracle 8.
Propriedade RequestLive
Quando esta propriedade estiver setada para True, e uma cláusula SQL possuir algum comentário (com o símbolo --), o erro ‘Token not found’ será gerado. Exemplo
Select * From table
-- comentário
Índices
O BDE tem problemas ao tentar manipular uma tabela com mais de 72 índices no Oracle.
Windows 98
Ao ser instalado sobre o Windows 98, e acessar uma tabela Oracle, o BDE irá gerar o erro ‘Cannot load driver’.
DB2
O método Create, do objeto TTable, não permite a criação de uma tabela com mais de 255 campos. Uma exceção do tipo Access Violation é disparada.
Informix
Caso o parâmetro BCD esteja setado para False, o processamento de campos numéricos não ocorre de forma íntegra. Ao alterar registros com campos do tipo Money ou Decimal, por vezes é gerado o erro: ‘Record changed by another user’.
Caso a tabela possua mais de 74 índices, o erro ‘End of virtual table’ é gerado ao tentar abrir a tabela.
Caso a conexão com a rede ou com o banco de dados seja terminada de forma inesperada, um erro ocorrerá no Kernel32.dll do Windows, travando o sistema.
Conclusão
Nesta edição finalizamos a ilustração dos erros encontrados na BDE 5.01. O BDE é um dos aplicativos mais atualizados pela Borland. Confira no endereço www.borland.com.br e mantenha-se informado sobre as constantes atualizações para este Driver.