Artikel-ID: 190642 - Geändert am: Mittwoch, 2. März 2005 - Version: 2.2

PRB: ADODC-Fehler beim Neupositionieren ist bei EOFAction-adDoAddNew

SystemtippDieser Artikel bezieht sich auf ein anderes Betriebssystem als das von Ihnen verwendete. Für Sie möglicherweise nicht relevante Artikelinhalte wurden deaktiviert.

Auf dieser Seite

Alles erweitern | Alles schließen

Problembeschreibung

Wenn Sie hinter EOF verschieben, ein neuer, leerer Datensatz wird angezeigt und das ADO-Datensteuerelement EOFAction-Eigenschaft auf 2 AdDoAddNew festgelegt ist. Wenn Sie keine Daten für den neuen Datensatz eingeben und den Datensatz verlassen, erhalten Sie die Fehlermeldung:
Eine leere Zeile einfügen kann nicht - muss mindestens eine Spaltenwert festgelegt haben.

Ursache

ADO ist eine implizite Aktualisierung ein verschieben in einem Recordset. Wenn das ADO-Datensteuerelement EOFAction-Eigenschaft auf 2 AdDoAddNew festgelegt ist, wird ADO Fügt einen neuen Datensatz hinzu und ermöglicht die Benutzer, den Datensatz in gebundenen Steuerelementen zu bearbeiten. Wenn der Benutzer von der neu erstellten Datensatz wechselt, führt ADO ein Recordset aktualisieren. Wenn der Benutzer entschieden hat, nicht um einen Datensatz hinzuzufügen, die gebundenen Steuerelemente leer lässt und verschiebt Sie den neu erstellten Datensatz die versuchte Aktualisierung bewirkt, dass ADO die Meldung "eine leere Zeile kann nicht eingefügt - benötigen Sie mindestens eine Spaltenwert festgelegt" angezeigt.

Das ADO-Datensteuerelement EOFAction-- unterscheidet die AdDoAddNew Verhalten sich das DAO-Datensteuerelement EOFAction-- Verhalten hinzufügen und dem Remote-Datensteuerelement EOFAction-- RdAddNew-Verhalten. Sie erhalten eine Nachricht nicht, wenn Sie von einem neu hinzugefügten Datensatz, wechseln Wenn das-Steuerelement oder das Remote-Datensteuerelement verwenden.

Lösung

Sie können dieses Verhalten umgehen, indem Code in das ADO-Datensteuerelement Error-Ereignisprozedur für die Fehlerbehandlung. Hier ist ein Beispiel für Code zur Behandlung dieser spezifischen Fehlers der Fehlernummer 16389 handelt:
    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
				

Status

Es handelt sich hierbei um ein beabsichtigtes Verhalten.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

In diesem Beispiel verwendet die Biblio.MDB-Datenbank, die in Visual Basic enthalten ist.
  1. Erstellen Sie in Visual Basic ein neues Standard EXE-Projekt. Form1 wird standardmäßig erstellt.
  2. Im Menü Projekt wählen Sie Komponenten und wählen Sie die Microsoft ADO-Datensteuerelement.
  3. Zeichnen Sie ein Textfeld und ein ADO-Datensteuerelement auf Form1.
  4. Legen Sie das ADO-Datensteuerelement Eigenschaften:

    1. Legen Sie die ConnectionString-Eigenschaft (ändern Sie der Pfad in der Datenquelle unter Zeichenfolge, entsprechend den Speicherort der Biblio.MDB auf Ihrem System):
               Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\Program
                    Files\Microsoft Visual Studio\VB98\Biblio.mdb
         
      								
    2. Legen Sie die EOFAction-Eigenschaft auf 2-AdDoAddNew.
    3. Legen Sie die RecordSource-Eigenschaft auf Authors.
  5. Legen Sie das Textfeld Eigenschaften.

    1. Legen Sie die DataSource-Eigenschaft ADODC1.
    2. Legen Sie die DataField-Eigenschaft auf Autor.
  6. Testen Sie die Anwendung.

    1. Klicken Sie auf Ausführen. Das Textfeld sollte den ersten Autor angezeigt.
    2. Klicken Sie auf der ADODC MoveLast Schaltfläche. Im Textfeld wird den letzten Autor angezeigt.
    3. Klicken Sie auf der ADODC MoveNext Schaltfläche. Da Sie die ADODC festlegen EOFAction-, 2-AdDoAddNew, Sie sehen ein leeres Textfeld, für die Dateneingabe bereit.
    4. Klicken Sie auf der ADODC MovePrevious Schaltfläche zum Abbrechen der AddNew. Die Meldung wird angezeigt:
      Eine leere Zeile einfügen kann nicht - muss mindestens eine Spaltenwert festgelegt haben.
      Klicken Sie auf das Feld Meldung Schaltfläche OK.
    5. Um den Vorgang fortzusetzen, Sie geben Sie den Namen des neuen Autors in das Feld Text dann den Datensatz verlassen, oder klicken Sie auf Form1 die Schaltfläche Schließen.
  7. Fügen Sie den Code zu umgehen:

    1. Doppelklicken Sie im Entwurfsmodus auf die ADO-Datensteuerelement um dessen Ereignisprozedur Fenster zu öffnen.
    2. Kopieren Sie den folgenden Code in das ADO-Datensteuerelement Error-Ereignisprozedur:
               If ErrorNumber = 16389 Then
                  If Adodc1.Recordset.State = ADODB.adStateOpen Then
                      Adodc1.Recordset.CancelUpdate
                      Adodc1.Recordset.MoveLast
                      fCancelDisplay = True
                  End If
               End If
         
      								
  8. Erneut Testen der Anwendung. Sie erhalten nicht mehr die Fehlermeldung.

Informationsquellen

Visual Basic, wählen Sie Hilfe, suchen Sie... und geben Sie "ADO-Datensteuerelement".

Das Formular mit der ADO-Datensteuerelement markieren Sie das Steuerelement und die Taste F1 drücken.

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Keywords: 
kbmt kbprb KB190642 KbMtde
Maschinell übersetzter ArtikelMaschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 190642  (http://support.microsoft.com/kb/190642/en-us/ )
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.