Artigo Clube Delphi Edição 1 - Será que o erro é meu?

Artigo da Revista Clube Delphi Edição 1.

Nesta seção falaremos sobre bugs no Delphi. Não sobre os possíveis bugs que possamos cometer, mas literalmente sobre os bugs da linguagem Delphi. Achei interessante criar um tópico para cuidar deste assunto, pois nos deparamos com erros e limitações de programação diariamente. Uma seção falando sobre coisas realmente não são possíveis de serem feitas, ou de bugs na linguagem, pode economizar bastante tempo de depuração na hora em que nos deparamos com tais situações.

Nesta edição me limitei a falar sobre bugs encontrados na parte de manipulação de banco de dados, e que foram resolvidos com os últimos upgrades do Delphi 4.0 (4..01 e 4.02). não deixe de instalar estes patchs, pois a quantidade de problemas encontrados na versão 4.00 é muito grande. A seguir separei alguns destes erros (ou limitações), mostrando em qual patch ele foi solucionado:

No Delphi 4.00, muitos eventos do objeto TTABLE não são disparados de forma correta. Veja alguns deles:

Outras falhas encontradas no uso do objeto TTABLE

Método LOCATE: Este foi o erro mais curioso que encontramos, pois ao executá-lo em campos do tipo DateTime, em alguns casos ele simplesmente não funciona. Segundo a empresa não há explicação, ele simplesmente não funciona, aleatoriamente. O mesmo acontece com consultas parametrizadas, usando o objeto Tquery: ao executar uma consulta que tenha um campo DateTime como parâmetro, na maioria das vezes ele funciona, mas nem sempre.

O método Locate apresenta também um erro muito curioso: ele não trabalha de forma consistente. Por exemplo, faça o seguinte teste: coloque em um form um objeto Ttable, um TdataSource, um TdbGrid e um Tbutton. Linke-os de forma correta.

Em seguida defina a propriedade DatabaseName do objeto Ttable para DBDEMOS e a propriedade TableName para Items.db.

No evento OnClick do Tbutton, digite:

Table1.SetRange(['1060'],['1060']); Table1.locate('PartNo','11518',[]);

O registro não será encontrado.

Agora mude o código para:

table1.SetRange(['1005'],['1005']); Table1.locate('PartNo','7612',[]);

E o registro será encontrado...

Mais uma vez, não houve explicação da Inprise sobre isto. Resolvido no patch 4.02.

Também há problemas ao usar o objeto Tquery. Vejamos alguns:

Bom, chega de bugs para nós. Felizmente, todos encontrados aqui já foram resolvidos com os patchs do Delphi 4.0.

Artigos relacionados