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 | Reduzir tudo

Sintomas

Quando ultrapassar EOF, é apresentado um novo registo em branco e EOFAction propriedade o controlo de dados ADO é definida para 2 adDoAddNew. Se não introduzir dados para o novo registo e mover para fora do registo, obtém a mensagem de erro:
Não é possível inserir uma linha vazia - tem de ter pelo menos uma coluna valor definido.

Causa

ADO não uma actualização implícita num mover num conjunto de registos. Quando EOFAction propriedade o controlo de dados de ADO estiver definido para 2 adDoAddNew, ADO adiciona um novo registo e permite ao utilizador editar o registo de controlos dependentes. Quando o utilizador se desloca do registo recém-criado, o ADO é um conjunto de registos actualização. Se o utilizador decidiu não adicionar um registo, deixa controlos dependentes em branco e move-se desactivar o registo recém-criado, a actualização tentativa faz com que ADO para apresentar a mensagem "não é possível inserir uma linha vazia - tem de ter pelo menos uma coluna valor definido".

EOFAction o controlo de dados de ADO - adDoAddNew comportamento é diferente do que EOFAction o controlo de dados de DAO - adicionar novo comportamento e EOFAction do controlo de dados remoto - rdAddNew comportamento. Não obterá uma mensagem se mover de um registo recém-adicionados quando utilizar o controlo de dados ou o controlo remoto de dados.

Resolução

Pode contornar este comportamento, adicionando código no procedimento de evento de erro do controlo de dados ADO de tratamento de erros. Aqui está um exemplo de código para processar este 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
				

Ponto Da Situação

Este comportamento ocorre por predefinição.

Mais Informação

Passos para reproduzir o comportamento

Este exemplo utiliza a base de dados Biblio.MDB que está incluído no Visual Basic.
  1. No Visual Basic, crie um novo projecto EXE padrão. É criado o Form1 por predefinição.
  2. Menu projecto, escolha componentes e, em seguida, seleccione o controlo de dados do Microsoft ADO.
  3. Desenhe uma caixa de texto e um controlo de dados ADO no Form1.
  4. Defina propriedades do controlo de dados ADO:

    1. Defina a propriedade ConnectionString (alterar o caminho de origem de dados de cadeia abaixo para reflectir a localização do Biblio.MDB no sistema):
               Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\Program
                    Files\Microsoft Visual Studio\VB98\Biblio.mdb
         
      								
    2. Defina a propriedade EOFAction adDoAddNew 2.
    3. Defina a propriedade OrigemDosRegistos para autores.
  5. Defina as propriedades da caixa de texto.

    1. Defina a propriedade DataSource como ADODC1.
    2. Defina a propriedade DataField para autor.
  6. Teste a aplicação.

    1. Clique em executar. A caixa de texto deve apresentar o primeiro autor.
    2. Botão de ADODC MoveLast. A caixa de texto apresentará o último autor.
    3. Botão de ADODC MoveNext. Porque definido o ADODC EOFAction para 2-adDoAddNew, verá uma caixa de texto em branco, pronta para a entrada de dados.
    4. Clique MovePrevious botão a ADODC para cancelar o AddNew. Será apresentada a mensagem:
      Não é possível inserir uma linha vazia - tem de ter pelo menos uma coluna valor definido.
      Faça clique sobre botão OK a caixa de mensagem.
    5. Para continuar, tem escreva nome de um novo autor na caixa de texto, em seguida, mover para fora do registo ou clique em botão Fechar do Form1.
  7. Adicione a solução de código:

    1. No modo de estrutura, faça duplo clique no controlo de dados ADO para abrir a janela procedimento de evento.
    2. Copie o seguinte código num procedimento de evento de erro do controlo 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. Teste novamente a aplicação. Já não obterá a mensagem de erro.

Referências

No Visual Basic, seleccione Ajuda, procurar... e introduza "Controlo de dados ADO".

No formulário que contém o controlo de dados ADO, seleccione o controlo e prima 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 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: 190642  (http://support.microsoft.com/kb/190642/en-us/ )