ID do artigo: 190642 - Última revisão: quarta-feira, 2 de março de 2005 - Revisão: 2.2

PROBLEMA: Erro ADODC em adDoAddNew reposicionar quando EOFAction É

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sintomas

Quando você move após EOF, um novo registro em branco é exibido e EOFAction propriedade do controle de dados ADO é definido como 2 adDoAddNew. Se você não inserir dados para o novo registro e mover para fora do Registro, você obterá a mensagem de erro:
Não é possível inserir uma linha vazia - deve ter pelo menos uma coluna valor definido.

Causa

ADO faz uma atualização implícita em uma movimentação de um conjunto de registros. Quando EOFAction propriedade do controle de dados ADO é definido como 2 adDoAddNew, ADO adiciona um novo registro e permite que o usuário editar o registro em controles acoplados. Quando o usuário move fora do registro recém-criado, o ADO é um conjunto de registros Update. Se o usuário tenha decidido não adicionar um registro, deixa os controles acoplados em branco e move desativar o registro recém-criado, ADO exibir a mensagem "não é possível inserir uma linha vazia - deve ter pelo menos uma coluna valor definido" faz com que a atualização de tentativa.

EOFAction do controle de dados ADO - adDoAddNew comportamento é diferente EOFAction do controle de dados DAO - adicionar novo comportamento e EOFAction do controle de dados remoto - rdAddNew comportamento. Você não receberá uma mensagem se você mover fora de um registro recém-adicionado ao usar o controle de dados ou o controle de dados remota.

Resolução

Você pode contornar esse comportamento adicionando o código no procedimento de evento de erro do controle de dados ADO de tratamento de erros. Aqui está um exemplo de código para manipular esse erro específico, que é o número do erro 16389:
    Private Sub Adodc1_Error(ByVal ErrorNumber As Long, _
        Description As String,  ByVal Scode As Long, _
        ByVal Source As String, ByVal HelpFile As String, _
        ByVal HelpContext As Long, fCancelDisplay As Boolean)

        If ErrorNumber = 16389 Then
            If Adodc1.Recordset.State = ADODB.adStateOpen Then
                Adodc1.Recordset.CancelUpdate
                Adodc1.Recordset.MoveLast
                fCancelDisplay = True
            End If
        End If
    End Sub
				

Situação

Esse comportamento é por design.

Mais Informações

Etapas para reproduzir o problema

Este exemplo usa o banco de dados Biblio.MDB incluído com o Visual Basic.
  1. No Visual Basic, crie um novo projeto Standard EXE. O Form1 é criado por padrão.
  2. A partir do menu Project, escolha componentes e selecione o controle de dados do Microsoft ADO.
  3. Desenhe uma caixa de texto e um controle de dados ADO em Form1.
  4. Defina propriedades do controle de dados ADO:

    1. Defina a propriedade ConnectionString (alteração o caminho em DataSource seqüência abaixo para refletir o local dos Biblio.MDB em seu sistema):
               Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\Program
                    Files\Microsoft Visual Studio\VB98\Biblio.mdb
         
      								
    2. Defina a propriedade EOFAction para adDoAddNew 2.
    3. Defina a propriedade OrigemDoRegistro para autores.
  5. Defina propriedades da caixa de texto.

    1. Defina a propriedade DataSource para ADODC1.
    2. Defina a propriedade DataField para autor.
  6. Teste o aplicativo.

    1. Clique em execução. A caixa de texto deve exibir o autor do primeiro.
    2. Clique em MoveLast botão do ADODC. A caixa de texto exibirá o último autor.
    3. Clique em MoveNext botão do ADODC. Porque você definir o ADODC EOFAction para 2-adDoAddNew, você verá uma caixa de texto em branco, pronta para entrada de dados.
    4. Botão do ADODC MovePrevious, para cancelar seu AddNew. Você verá a mensagem:
      Não é possível inserir uma linha vazia - deve ter pelo menos uma coluna valor definido.
      Clique em botão OK da caixa de mensagem.
    5. Para continuar, você deve digite nome do autor de um novo na caixa de texto, e em seguida, mova para fora do registro ou clique botão Fechar do Form1.
  7. Adicione a código solução alternativa:

    1. No modo de design, clique duas vezes no controle de dados ADO para abrir sua janela de procedimento de evento.
    2. Copie o seguinte código no procedimento do evento Error do controle de dados ADO:
               If ErrorNumber = 16389 Then
                  If Adodc1.Recordset.State = ADODB.adStateOpen Then
                      Adodc1.Recordset.CancelUpdate
                      Adodc1.Recordset.MoveLast
                      fCancelDisplay = True
                  End If
               End If
         
      								
  8. Testar novamente o aplicativo. Você não receberá a mensagem de erro.

Referências

No Visual Basic, selecione Ajuda, procurar... e digite "Controle de dados ADO".

No formulário que contém o controle de dados ADO, selecione o controle, pressione a tecla F1.

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Palavras-chave: 
kbmt kbprb KB190642 KbMtpt
Tradução automáticaTraduçã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: 190642  (http://support.microsoft.com/kb/190642/en-us/ )