CORRECÇÃO: Recordset.Update causa erro mensagem: "Conflito de operação de cursor" ocorrem quando você usar Server lado cursores e um disparador INSTEAD OF

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: 324900
Sintomas
Quando um aplicativo de ActiveX Data Objects (ADO) que usa no lado do servidor cursores (adUseServer) executa um Recordset.Update em uma tabela com um INSTEAD OF disparar, você receber a seguinte mensagem de erro:
Erro em tempo de execução-2147217885 (80040e23) 'cursor operação conflito'
Você não receber a mensagem de erro quando a tabela tem UPDATE, INSERT ou DELETE após disparadores.
Causa
O comportamento da atualização cursor SQL Server 2000 para INSTEAD OF disparadores está incorreto.
Resolução
Um hotfix suportado está disponível no Microsoft. No entanto, esse hotfix destina-se a corrigir o problema descrito neste artigo. Aplique-o somente aos sistemas que apresentarem esse problema específico.

Se o hotfix está disponível para download, há uma seção "Download de Hotfix disponível" na parte superior neste artigo da Base de dados de Conhecimento. Se esta seção não for exibido, envie uma solicitação para suporte e atendimento ao cliente Microsoft para obter o hotfix.

Observação Se ocorrerem problemas adicionais ou se qualquer solução de problemas é necessária, talvez você precise criar uma solicitação de serviço separada. Os custos normais de suporte serão aplicados a questões de suporte adicionais e problemas que não se qualificam para esse hotfix específico. Para obter uma lista completa de números de telefone de suporte e Atendimento Microsoft ou para criar uma solicitação de serviço separada, visite o seguinte site: Observação O formulário "Download de Hotfix disponível" exibe os idiomas para os quais o hotfix está disponível. Se você não vir seu idioma, é porque um hotfix não está disponível para esse idioma.A versão em inglês dessa correção 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        Time      Version        Size              File name   -----------------------------------------------------------------------   12/03/2001  12:14 AM                      1,652 bytes  EULA.txt   07/02/2002  11:59 AM                      5,826 bytes  Readme.txt   07/01/2002   4:07 PM                     10,794 bytes  sp2_qfe_serv_uni.sql   07/01/2002   5:50 PM                 12,624,896 bytes  Sqlservr.pdb   07/01/2002   5:50 PM  2000.80.652.0  12,624,896 bytes  Sqlservr.exe				

Como Contornar
Para contornar esse comportamento você pode:
  • Use cursores do lado do cliente de ADO (adUseClient). - ou -

  • Execute a atualização usando um objeto ADODB.Command com uma instrução UPDATE SQL. Por exemplo:
    cmd.CommandText = "UPDATE MyTestTable set namefield='asdasdf' where [id] = 1"cmd.Execute					
Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no começo deste artigo.
Mais Informações

Passos para reproduzir o problema

  1. Use o Query Analyzer para abrir uma conexão com o banco de dados pubs do SQL Server 2000 e, em seguida, execute a seguinte instrução Transact-SQL:
    USE PubsGOCreate Table TestTable ([ID] int NOT NULL, [NameField] varchar(50) NULL, RowGUID uniqueidentifier Default(NewID()))GOInsert Into TestTable ([ID], [NameField]) Values (1, 'test1')GOInsert Into TestTable ([ID], [NameField]) Values (2, 'test2')GOInsert Into TestTable ([ID], [NameField]) Values (3, 'test3')GOCreate Trigger t_Test On TestTable Instead Of UpdateAsWAITFOR DELAY '000:00:05'GO 						
  2. Crie um EXE padrão do Microsoft Visual Basic 6.0 e definir uma referência ao ADO 2.6 (ou ADO 2.5 ou 2.7 ADO).
  3. Colocar um botão de comando chamado Command1 , em um formulário e em seguida, adicione o código a seguir para o formulário:
    Dim conn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim strSQL As StringPrivate Sub Command1_Click()   conn.Open "Provider=SQLOLEDB;User ID=MyID;Initial Catalog=pubs;Data   Source=MyServer;Password=MyPassword"   rs.ActiveConnection = conn   rs.CursorLocation = adUseServer   rs.CursorType = adOpenStatic   rs.LockType = adLockOptimistic   strSQL = "Select * From TestTable Where [ID] = 1"   rs.Open strSQL   rs("NameField") = "incorrectValue"   rs.Update   ' Error 'Cursor operation conflict' occurs here.   rs.Close   conn.Close End Sub 					
    a mensagem de erro mostrada na seção "Sintomas" ocorre quando rs.Update é executada.

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 324900 - Última Revisão: 02/22/2007 22:12:32 - Revisão: 3.6

Microsoft SQL Server 2000 Service Pack 2

  • kbmt kbautohotfix kbhotfixserver kbqfe kbbug kbfix kbqfe KB324900 KbMtpt
Comentários