Compartilhar via


Erro de tempo de execução do VBScript (Incompatibilidade de Tipo) ao realizar uma comparação numérica em um tipo de campo adNumeric

Este artigo ajuda a resolver um erro (incompatibilidade de tipo) que ocorre quando você usa o VBScript (Visual Basic Scripting Edition) para realizar uma comparação numérica ou cálculo em um tipo de campo adNumeric (131).

Versão original do produto: Visual Basic Script
Número original do KB: 306916

Sintomas

Quando você usa o VBScript para realizar uma comparação numérica ou cálculo em um tipo de campo adNumeric (131), as seguintes mensagens de erro podem ser exibidas:

  • Mensagem de erro 1

    Erro de tempo de execução do Microsoft VBScript '800a000d'
    Tipos incompatíveis

  • Mensagem de erro 2

    Erro de tempo de execução do Microsoft VBScript '800a01ca'
    A variável usa um tipo de Automação não compatível no VBScript

Motivo

Essas mensagens de erro ocorrem porque o VBScript não pode converter corretamente valores adNumeric para um tipo numérico válido. Esse comportamento é por design.

Resolução

Você pode usar uma das duas soluções alternativas abaixo:

  • Usar a função CDbl ou CInt para converter o campo adNumeric.
  • Usar JScript, que não exibe esse comportamento.

Você pode reproduzir esse comportamento em uma página ASP (Active Server Pages) ou por meio de um arquivo Visual Basic Script (.vbs) simples. As etapas a seguir demonstram como reproduzir o problema em um arquivo .vbs simples.

Etapa 1 para reproduzir o comportamento: Criar a tabela Oracle

Execute o seguinte script em seu servidor Oracle para criar a tabela de amostra:

DROP TABLE Cust;
CREATE TABLE Cust (CustID NUMBER(22,6) PRIMARY KEY, Name VARCHAR2(50));
INSERT INTO Cust VALUES(222,'Kent');
INSERT INTO Cust VALUES(333,'Sally');
COMMIT;

Etapa 2 para reproduzir o comportamento: Criar o arquivo VBS

  1. No Bloco de notas, crie um novo documento de texto chamado Test.vbs e cole o código a seguir no teste.

    Set oConn = CreateObject("ADODB.Connection")
    oConn.open "Provider=MSDAORA;user id=User;" & _
    "password=password;data source=Oracle816Server;"
    
    set oRS = oConn.Execute("Select CustID FROM Cust")
    MsgBox "Numeric field type is 131." & vbcrlf & _
    "Field Type = " & ors.fields("CustID").type
    
    MsgBox "Numeric field * 100 = " & oRS("CustID") * 100
    MsgBox "Numeric field * 100 = " & cdbl(oRS("Custid")) * 100
    
  2. Modifique a cadeia de conexão para que ela aponte para o servidor Oracle e informe um nome de usuário e uma senha válidos.

  3. Salve Test.vbs na sua área de trabalho. Você deve receber um aviso de que a alteração da extensão pode tornar o arquivo instável. Clique em OK para continuar. Se você não vir esse aviso, verifique se está exibindo as extensões dos tipos de arquivo conhecidos.

  4. Feche Test.vbs.

  5. Na sua área de trabalho, clique duas vezes em Test.vbs para executar o código. A mensagem de erro Incompatibilidade de Tipo é exibida.

  6. Remova o comentário da seguinte linha de código, que converte o campo adNumeric para um tipo de dados duplo:

    MsgBox "Numeric field * 100 = " & cdbl(oRS("Custid")) * 100
    
  7. Comente a seguinte linha de código:

    MsgBox "Numeric field * 100 = " & oRS("CustID") * 100
    
  8. Feche e salve Test.vbs.

  9. Na sua área de trabalho, clique duas vezes em Test.vbs para executar o código novamente, você verá duas caixas de mensagem e nenhuma mensagem de erro.