Esse artigo faz parte da revista Clube Delphi edição 4. Clique aqui para ler todos os artigos desta edição



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.