VB - Os erros : Out of Stack e Can't Find Installable ISAM


Como toda a linguagem de programação o Visual Basic apresenta erros dos mais variados e nas mais diversas circunstâncias. Não sei se você sabe mas além dos bugs que já foram solucionados existem muitos bugs não resolvidos na linguagem.

Neste artigo vou falar sobre dois erros muito comuns de ocorrerem e que podem tirar o sono de qualquer programador VB se a situação for crítica. Me refiro aos erros :

Vou focar as causas de erros para o ambiente de desenvolvimento com utilização de acesso a base de dados/Exxcel e não garanto a solução definitiva a estes erros pois dependendo do seu ambiente de desenvolvimento e de execução talvez ela não seja aplicável ao seu caso ; estou apenas mostrando os caminhos que você pode seguir para tentar resolver os erros.

Can't Find Installable ISAM

Esta mensagem de erro aparece em diversas situações , geralmente uma combinação das seguintes condições :

1- ) Quando você esta executando duas aplicações VB para banco de dados

A causa deste erro (nesta condição) é que o motor do banco de dados Microsoft Access não esta preparado para apontar para o novo arquivo .INI requerido pela segunda aplicação.

Para contornar este comportamento insira a seção inteira para os Installabe ISAMs do arquivo VB.INI no arquivo <appname>.INI de cada aplicação Visual Basic que tem acesso aos drives ISAM. Esta seção e dada abaixo:

[Installable ISAMs]
Btrieve=C:\WINDOWS\SYSTEM\btrv110.dll
FoxPro 2.0=C:\WINDOWS\SYSTEM\xbs110.dll
FoxPro 2.5=C:\WINDOWS\SYSTEM\xbs110.dll
dBASE III=C:\WINDOWS\SYSTEM\xbs110.dll
dBASE IV=C:\WINDOWS\SYSTEM\xbs110.dll
Paradox 3.X=C:\WINDOWS\SYSTEM\pdx110.dll

2- Quando você importa dados de um arquivo Microsoft FoxPro, Paradox, dBASE ou Btrieve.

Este erro é causado por uma entrada incorreta no arquivo MSACC20.INI , por um arquivo DLL corrompido ou por uma versão recente do arquivo BTRV200.DLL do Microsoft Access Service Pack usada com a versão original do arquivo MSAJT200.DLL.

Para resolver este problema faça os seguintes passos:

[Installable ISAMs]
Paradox 3.X=C:\Windows\System\Pdx200.dll
Paradox 4.X=C:\Windows\System\Pdx200.dll
FoxPro 2.5=C:\Windows\System\Xbs200.dll
FoxPro 2.6=C:\Windows\System\Xbs200.dll
FoxPro 2.0=C:\Windows\System\Xbs200.dll
dBASE III=C:\Windows\System\Xbs200.dll
dBASE IV=C:\Windows\System\Xbs200.dll
Btrieve=C:\Windows\System\Btrv200.dll

Nota: Se este erro ocorrer durante operações com o Excel provavelmete os drivers para banco de dados do Excel não estão completamente instalados. Para corrigir o problema nesta condição você deve instalar a correta versão da Microsoft MDAC 2.7. (Para usuários Windows 2000/XP a MDAC já faz parte do sistema operacional.)

3-) Você esta usando objetos de acesso a dados intrínsicos - ADO - DataControl para se conectar a um banco de dados Microsoft Access.

Nesta situação particular esta mensagem de erro ocorre se você esta com a versão incorreta do arquivo MSVBVM60.DLL registrado no seu sistema ou esta distribuindo um versão incorreta com o Package and Deployment Wizard. A versão incorreta da DLL pode ser instalada se você atualizar o seu VB 6.0 com o service Pack 4 ou superior e se a sua versão do arquivo MSVBVM60.DLL é mais recente que a versão do service Pack.

Para resolver o problema tenha certeza de que a versão do arquivo MSVBVM60.DLL é a mesma que é distribuida com o service Pack SP4 para VB6 (que é 6.00.8877 for SP4 e 6.00.8964 para SP5).

Para ter certeza de que a versão correta do arquivo MSVBVM60.DLL esta sendo distribuida , copie o arquivo no diretório :

\Microsoft Visual Studio\VB98\Wizards\PDWizard\Redist

Out of Stack error 28

Este erro significa que houve um estouro de pilha . A pilha é uma área de memória que cresce e encolhe de forma dinãmica com a demanda do seu programa VB .EXE. As possívels causas para este erro são:

Para resolver isto verifique se existem muitos procedimentos aninhados no seu código.(Chamadas recursivas) E certifique-se de que elas terminem de forma efetiva.

Tente declarar algumas variáveis em um módulo. Você pode também declarar todas as variáveis em um procedimento estático informando a palavra chave static antes do nome do seu procedimento.

Strings de tamanho fixo ocupam muito espaço da área de pilha. Tente redefinir algumas de suas variáveis strings para comprimente variável.

Além destes casos existem também os erros de lógica ou de conceituação que você comete a nível de código. Eles ficam ali na sua cara e você não percebe que o problema é aquela inocente chamada a um evento Click do um CheckBox. Quer ver como é verdade ???

- No Visual Basic crie um novo projeto e no formulário padrão insira dois controles CheckBox
- A seguir insira o código abaixo no seu formulário.

Private Sub Form_Load()
    Check1.Value = Checked
    Show
End Sub

Private Sub Check1_Click()
   Check1.Value = Checked
   Check2.Value = Unchecked
End Sub

Private Sub Check2_Click()
   Check1.Value = Unchecked
   Check2.Value = Checked

End Sub


Execute o projeto e ele vai rodar sem problemas . Agora clique no segundo Checkbox . Adivinha o que vai acontecer? Veja o resultado abaixo:

Mas por que ???

Elementar , meu caro Watson ... Ao clicar no segundo ChecKBox você vai entrar em um loop recursivo infinito e isto vai estourar a pilha do sistema.

O código correto que deveria esta no formulário deveria ser :(ou o correto seria usar o controle radioButton ???)

Private Sub Form_Load()
   Check1.Value = Checked
   Show
End Sub

Private Sub Check1_Click()
     If Check1.Value = Checked Then
                 Check2.Value = Unchecked
     End If
End Sub

Private Sub Check2_Click()
       If Check2.Value = Checked Then
              Check1.Value = Unchecked
        End If
End Sub

Se o código que causou este erro estivesse no meio das 2000 linhas de código do seu programa talvez não fosse tão fácil descobrir o erro , não é mesmo...

E ponto final. Até mais ver ...


José Carlos Macoratti