CORRECÇÃO: ADO suprime erros ao obter para tipos de dados Nonvariant

Traduções de Artigos Traduções de Artigos
Artigo: 274423 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Quando a obtenção de valores do conjunto de linhas para tipos de dados nonvariant, ActiveX Data Objects (ADO) pode suprimir erros relacionados com o estado do conjunto de registos, tais como notificações que o registo está bloqueado por outro utilizador.

Este 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). Este problema não ocorre na versão do MDAC 2.60.6526.3 (MDAC 2.6 RTM).

Causa

É colocado um caminho de código ligeiramente diferente dependendo se a aplicação está a obter para tipos de dados variante. A utilização de variantes é moldada num contexto interno objecto que tem a capacidade de devolver informações de erro. Nonvariants não têm esta wrapper de contexto e não devolvem informações de erro.

Resolução

Para resolver este problema, obtenha o service pack mais recente do Microsoft Data Access Components 2.5. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
293312INFO: Como obter o mais recente MDAC 2.5 Service Pack
A versão inglesa desta tem os atributos de ficheiro (ou posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são indicadas no formato de universal hora (UTC) coordenada Coordinated. Quando visualiza as informações do ficheiro, é convertido para a hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador fuso horário na ferramenta Data e hora no painel de controlo.
   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

Não existe nenhuma solução para este problema.

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo. Este problema foi corrigido pela primeira vez no Microsoft Data Access Components 2.5 Service Pack 2.

Mais Informação

Passos para reproduzir o comportamento

  1. Copie o seguinte código num projecto do Visual Basic:

    Nota <username>Tem de alterar o UID <utilizador> valor e o PWD = valor < palavra-passe segura > para os valores correctos antes de executar este código. Certifique-se de que UID tem as permissões adequadas para efectuar esta operação na base 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. Adicione uma referência para o Microsoft ActiveX Data Objects 2.5 biblioteca.
  3. Execute o código e escolha Sim quando lhe for pedido para utilizar uma variante. Tenha em atenção que um erro "O tempo de espera expirou" é devolvida mensagem indicando que não foi possível obter os registos no período de tempo especificado.
  4. Volte a executar o código e, desta vez seleccione não quando pedido para utilizar uma variante. Desta vez erro é devolvido indicando que não existe nenhum registo actual, mas não existe nenhuma indicação se excedeu o tempo de espera.

Referências

Para obter informações adicionais, clique nos números de artigo existentes abaixo para visualizar os artigos na Microsoft Knowledge Base:
247757CORRECÇÃO: Ligação fuga utilizando o comando com parâmetros de ADO
264442CORRECÇÃO: Conjunto de registos ADO perde a propriedades de filtro quando organizado em Proc.
264701CORRECÇÃO: Transmitir ByRef de conjunto de registos ADO repõe a informação de erro

Propriedades

Artigo: 274423 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 274423

Submeter comentários

 

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