Não é possível atualizar o recordset ADO usando acesso provedor OLE DB

O suporte para o Office 2003 terminou

A Microsoft terminou o suporte para o Office 2003 em 8 de abril de 2014. Esta alteração afetou as suas atualizações de software e opções de segurança. Saiba o que isto significa para você e como permanecer protegido.

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: 824256
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Este artigo se aplica somente a um banco de dados do Microsoft Access (.mdb).

Avançadas: Requer especialista de codificação, interoperabilidade e habilidades de multiusuário.
Para uma versão deste artigo do Microsoft Access 2002, consulte 287455.
Sintomas
Quando você tenta editar um campo em um conjunto de registros ADO usando o Microsoft Office Access 2003 e Microsoft Jet OLE DB Provider, você receberá a seguinte mensagem de erro:

Erro em tempo de execução '3251':

Recordset atual não dá suporte a atualização. Isso pode ser uma limitação do provedor ou da locktype selecionado.
Causa
A propriedade CursorLocation do conjunto de registros é definida como adUseClient para abrir um cursor ao lado do cliente.
Como Contornar
Você pode contornar o problema usando um dos seguintes métodos:

Usar um cursor do lado do servidor

Você pode usar um cursor do lado do servidor em vez de um cursor no lado do cliente. Para fazer isso, abra o cursor ao lado, definindo a propriedade CursorLocation do conjunto de registros para adUseServer .

Por exemplo, você pode usar código semelhante ao seguinte código.

Observação O exemplo código neste artigo utiliza Microsoft ActiveX Data Objects. Para que este código seja executado corretamente, você deve fazer referência a 2.x Microsoft ActiveX Data Objects Library (onde 2.x é 2.1 ou posterior). Para fazer isso, clique em referências no menu Ferramentas no Editor do Visual Basic e certifique-se de que o 2.x Microsoft ActiveX Data Objects Library caixa de seleção está marcada.
Dim cn As ADODB.ConnectionDim rs As ADODB.RecordsetDim strPath As String   'Update the following path to point to the sample'Northwind.mdb database on your computer.strPath = "C:\Program Files\Microsoft Office\Office11\Samples\Northwind.mdb"'Create a new ADO Connection to Northwind'by using Access and the Jet OLE DB'provider.Set cn = New ADODB.ConnectionWith cn    .Provider = "Microsoft.Access.OLEDB.10.0"    .Properties("Data Provider").Value = "Microsoft.Jet.OLEDB.4.0"    .Properties("Data Source").Value = strPath    .OpenEnd With'Create a new ADO Recordset by using a server-side'keyset cursor and optimistic locking.Set rs = New ADODB.RecordsetWith rs    .ActiveConnection = cn    .Source = "SELECT * FROM Categories"    .CursorType = adOpenKeyset    .LockType = adLockOptimistic    .CursorLocation = adUseServer    .OpenEnd With

Usar ambos ou ambos o provedor de forma ou o provedor Jet

Não use o provedor Access 10.0. Se você tiver que acessar os dados sem formato serviços, você pode usar apenas o provedor Jet para abrir a conexão ADO.

Por exemplo, você pode usar código semelhante ao seguinte código para abrir uma conexão ADO com o provedor do Jet OLE DB:
Dim cn As ADODB.ConnectionDim strPath As String    'Update the following path to point to the sample'Northwind.mdb database on your computer.strPath = "C:\Program Files\Microsoft Office\Office11\Samples\Northwind.mdb"'Create a new ADO Connection to Northwind'by using Access and the Jet OLE DB'provider.Set cn = New ADODB.ConnectionWith cn    .Provider = "Microsoft.Jet.OLEDB.4.0"    .Properties("Data Source").Value = strPath    .OpenEnd With

Se você deve ter o formato de serviços de suporte para conjuntos de registros hierárquicos, você pode usar o provedor de forma (MSDataShape) junto com o Jet provedor para abrir sua conexão ADO.

Por exemplo, você pode usar código semelhante ao seguinte código:
Dim cn As ADODB.ConnectionDim strPath As String    'Update the following path to point to the sample'Northwind.mdb database on your computer.strPath = "C:\Program Files\Microsoft Office\Office11\Samples\Northwind.mdb"'Create a new ADO Connection to Northwind'by using Access and the Jet OLE DB'provider.Set cn = New ADODB.ConnectionWith cn    .Provider = "MSDataShape"    .Properties("Data Provider").Value = "Microsoft.Jet.OLEDB.4.0"    .Properties("Data Source").Value = strPath    .OpenEnd With
Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft que estão listados na seção "Aplica-se a" deste artigo.
Mais Informações
Quando você especifica um cursor ao lado do cliente com Access 10.0 e com o provedor do Jet 4.0 OLE DB, o mecanismo de cursor ADO substitui a propriedade LockType do conjunto de registros e define a propriedade LockType para adLockReadOnly . Portanto, você não pode atualizar o conjunto de registros por meio de código.

O provedor Access 10.0 é um provedor OLE DB. O provedor Access 10.0 foi criado para aprimorar a atualizabilidade e para melhorar a funcionalidade com o Microsoft SQL Server no Access arquivos de projeto (.adp) e, em páginas de acesso a dados.

Porque o 10.0 Access provedor é um provedor de serviços, o Access provedor executa os serviços adicionais de dados que são expostos por um provedor de dados OLE DB e não expõem dados de uma fonte de dados específico. Portanto, quando você abre o ADO conexão, você deve especificar um provedor de dados OLE DB (como Microsoft SQL Server OLE DB Provider [SQLOLEDB]), ou você deve especificar o Jet OLE DB Provider (Microsoft.Jet.OleDb.4.0). Acesso 10.0 OLE DB Provider só há suporte para uso no Access 2003.

passos para reproduzir o problema
  1. Inicie o Access 2003.
  2. Crie um novo banco de dados.
  3. Na janela banco de dados, clique em módulos na seção objetos .
  4. Clique em novo .
  5. No Editor do Visual Basic, digite o código a seguir ou cole o código a seguir:
    Sub UpdateCategories()   	Dim cn As ADODB.Connection	Dim rs As ADODB.Recordset	Dim strPath As String    	'Update the following path to point to the sample	'Northwind.mdb database on your computer.	strPath = "C:\Program Files\Microsoft Office\Office11\Samples\Northwind.mdb"	'Create a new ADO Connection to Northwind	'by using Access and the Jet OLE DB	'provider.	Set cn = New ADODB.Connection	With cn		.Provider = "Microsoft.Access.OLEDB.10.0"		.Properties("Data Provider").Value = "Microsoft.Jet.OLEDB.4.0"		.Properties("Data Source").Value = strPath		.Open	End With	'Create a new ADO Recordset by using a client	'keyset cursor and optimistic locking.		Set rs = New ADODB.Recordset	With rs		.ActiveConnection = cn		.Source = "SELECT * FROM Categories"		.CursorType = adOpenKeyset		.LockType = adLockOptimistic		.CursorLocation = adUseClient		.Open	End With	'Try to update the CategoryName field from	'the table.		rs.Fields("CategoryName").Value = "Drinks" '<-- Errors here	rs.Update	rs.Close	cn.Close	Set rs = Nothing	Set cn = NothingEnd Sub
  6. No menu Debug , clique em Compile <Database Name>.
  7. No menu arquivo , clique em Salvar <Database Name>.
  8. No menu Exibir , clique em janela imediata .
  9. Na janela Immediate, digite o código a seguir e pressione ENTER:
    UpdateCategories
    aviso que você recebe a mensagem de erro mencionada na seção "Sintomas".
ACC2003 Access 2003

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 824256 - Última Revisão: 12/08/2015 03:39:54 - Revisão: 1.3

Microsoft Office Access 2003

  • kbnosurvey kbarchive kbmt kbado kbprogramming kbcursor kbdatabase kberrmsg kbprb KB824256 KbMtpt
Comentários