CORRECÇÃO: O ADO suprime erros quando Fetching em tipos de dados Nonvariant

Traduções deste artigo Traduções deste artigo
ID do artigo: 274423 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Quando buscar valores de conjunto de linhas em tipos de dados nonvariant, ActiveX Data Objects (ADO) pode suprimir erros relacionados ao status do conjunto de registros, como notificações que o registro está bloqueado por outro usuário.

Esse problema ocorre no Microsoft Data Access Components (MDAC) versão 2.50.4403.12 (Microsoft Windows 2000/MDAC 2.5 RTM) e 2.51.5303.5 (Windows 2000/MDAC 2.5 SP1). Esse problema não ocorre na versão do MDAC 2.60.6526.3 (MDAC 2.6 RTM).

Causa

Um caminho de código ligeiramente diferente é obtido dependendo se o aplicativo está buscando em tipos de dados variantes. O uso de variantes é encapsulado em um objeto de contexto interno que tem a capacidade para retornar informações de erro. Nonvariants não têm esse wrapper de contexto e não retornam informações de erro.

Resolução

Para resolver esse problema, obtenha o service pack mais recente para o Microsoft Data Access Components 2.5. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
293312INFO: Como obter o último MDAC 2.5 Service Pack
A versão em inglês isso apresenta os atributos de arquivo (ou posteriores) listados na tabela a seguir. As datas e horas desses arquivos são listadas na acordo hora universal coordenada (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para encontrar a diferença entre o UTC e a hora local, use a guia fuso horário na ferramenta Data e hora no painel de controle.
   Date       Version        Size             File name
   ----------------------------------------------------------
   8/29/2000  2.51.5629.0     20,480 bytes    Msader15.dll
   8/29/2000  2.51.5629.0    487,696 bytes    Msado15.dll
   8/29/2000  2.51.5629.0    172,304 bytes    Msadomd.dll
   8/29/2000  2.51.5629.0     57,616 bytes    Msador15.dll
   8/29/2000  2.51.5629.0    184,592 bytes    Msadox.dll
   8/29/2000  2.51.5629.0     57,616 bytes    Msadrh15.dll
   8/29/2000  2.51.5629.0     94,480 bytes    Msjro.dll
				

SOLUÇÃO ALTERNATIVA

Não há nenhuma solução alternativa para esse problema.

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no começo deste artigo. Esse problema foi corrigido primeiro no Microsoft Data Access Components 2.5 Service Pack 2.

Mais Informações

Etapas para reproduzir o problema

  1. Copie o seguinte código em um projeto Visual Basic:

    Observação <username>Você deve alterar o UID <nomedousuário> valor e o PWD = < senha de alta segurança > valor para os valores corretos antes de executar esse código. Certifique-se de que UID tenha as permissões apropriadas para executar esta operação no banco de dados.
    Dim cn As ADODB.Connection, cnOtherUser As ADODB.Connection
    Dim rs As ADODB.Recordset, rsOtherUser As ADODB.Recordset
    Dim strConn As String, strSQL As String
    Dim varData As Variant, intData As Integer
    
    strConn = "Provider=MSDASQL;Driver={SQL Server};Server=YourServer;Database=Northwind;UID=<user name>;PWD=<strong password>;"
    strSQL = "SELECT * FROM Customers"
    
    Set cnOtherUser = New ADODB.Connection
    cnOtherUser.Open strConn
    Set rsOtherUser = New ADODB.Recordset
    rsOtherUser.Open strSQL, cnOtherUser, adOpenKeyset, adLockPessimistic, adCmdText
    rsOtherUser.MoveFirst
    
    Set cn = New ADODB.Connection
    cn.Open strConn
    cn.CommandTimeout = 10
    Set rs = New ADODB.Recordset
    rs.Open strSQL, cn, adOpenKeyset, adLockPessimistic, adCmdText
    If MsgBox("Use Variant?", vbYesNo) = vbYes Then
        On Error Resume Next
        varData = rs(0)
        If Err.Number <> 0 Then
            MsgBox Err.Description
            Err.Clear
            cn.Errors.Clear
        Else
            MsgBox "No error!"
        End If
        On Error GoTo 0
    Else
        On Error Resume Next
        intData = rs(0)
        If Err.Number <> 0 Then
            MsgBox Err.Description
            Err.Clear
            cn.Errors.Clear
        Else
            MsgBox "No error!"
        End If
        On Error GoTo 0
    End If
    rs.Close
    cn.Close
    
    rsOtherUser.Close
    cnOtherUser.Close
    					
  2. Adicionar uma referência ao Microsoft ActiveX Data Objects 2.5 Library.
  3. Execute o código e escolha Sim quando solicitado para usar um Variant. Observe que um erro "Tempo limite expirou" mensagem é retornada, indicando que os registros não podem ser obtidos no período de tempo especificado.
  4. Execute novamente o código e dessa vez escolha não quando for solicitado para usar um Variant. Desta vez um erro é retornado informando que não há nenhum registro atual, mas não há nenhuma indicação de que você excedeu o tempo limite.

Referências

Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
247757CORRECÇÃO: Conexão vazamento com comando parametrizado em ADO
264442CORRECÇÃO: Conjunto de registros ADO perde propriedade filtro ao empacotada-PROC.
264701CORRECÇÃO: Passar ADO Recordset ByRef redefine informações de erro

Propriedades

ID do artigo: 274423 - Última revisão: segunda-feira, 24 de fevereiro de 2014 - Revisão: 2.2
A informação contida neste artigo aplica-se a:
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.5 Service Pack 1
Palavras-chave: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbado250fix kbbug kbfix kbmdac250fix kbqfe KB274423 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 274423

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com