PRB: Fehler 3001 Vergleich Felder als Kriterien zum Filtern von Recordsets

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 216873 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Problembeschreibung

Vergleichen zwei Felder in der Kriterienzeichenfolge, der die ADO-Eigenschaft Filter (z. B.: die Kriterienzeichenfolge besteht aus Klauseln im Formular: "Feldname Operator FieldName") generiert den folgenden Fehler:
Laufzeitfehler "3001":
Die Anwendung verwendet Argumente, die den falschen Typ sind, liegen außerhalb des zulässigen Bereichs oder stehen in Konflikt mit einem anderen.

Ursache

Diese Funktionalität kann nicht mit aktuellen Versionen von ADO ausgeführt werden. Die Syntax Kriterien die ADO-Eigenschaft Filter wird wie folgt definiert:
"Feldname Operator 'Literal_Value'"
Der 'Literal_Value'-Datentyp konnte Zeichenfolge, Zahl oder Datum sein. Den vorangehenden Ausdruck können Sie zwei Felder vergleichen. Bei dem Versuch, dazu wird angezeigt 3001.

Lösung

Eine Problemumgehung besteht darin, mehrere Ausdrücke, die durch boolesche Operatoren als Kriterien filtern verknüpft. Können Sie nur diese Wenn die die Werte der verglichenen Felder bekanntermaßen der Entwickler. Auf diese Weise kann der Entwickler eine Formel für die Kriterienzeichenfolge ausdenken, die die erforderliche Ergebnisse erfüllt. Beispiel:
rs.Filter = "Field1 Operator1 'Value1' AND Field2 Operator2 'Value2'"
				

Wenn der Entwickler nicht die Werte für Field1 und Field2 kennen, muss der Entwickler eine benutzerdefinierte Routine Filter (in der Clientanwendung) oder eine gespeicherte Prozedur (auf der Serverseite) verwenden, um dynamisch die Funktionalität zu erreichen. Sie können Ablaufsteuerung-Anweisungen in benutzerdefinierte Filter-Routine (oder die gespeicherte Prozedur), um die erforderlichen Feld Vergleiche durchführen und die erwarteten Ergebnisse generieren.

Dieser Artikel enthält ein Beispiel für solche eine Routine in der in diesem Artikel im Abschnitt "Weitere Informationen".

Warnung: Die Problemumgehung in Abschnitt Weitere Informationen bereitgestellten nur aus Gründen der Abbildung ohne keine Gewährleistung oder konkludent, einschließlich, aber nicht beschränkt auf konkludenten Garantien der Handelsüblichkeit und/oder Eignung für einen bestimmten Zweck erhält.

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.

Weitere Informationen

Die ADO-Hilfedokumentation besagt Folgendes für die Filter-Methode Kriterienausdruck--unter Bemerkungen:

Die Kriterienzeichenfolge besteht aus Klauseln im Formular Feldname - Operator - Wert (z. B. "LastName = 'Smith'"). Sie können zusammengesetzte Klauseln erstellen, indem einzelne Klauseln mit verketten und (z. B. "LastName = 'Smith' AND FirstName = 'John'") oder OR (z. B. "LastName = 'Smith' OR LastName = 'Jones'").

Außerdem wird die folgenden Richtlinien für die Kriterien besagt:

Wert ist der Wert, mit denen die Feldwerte vergleichen wird (beispielsweise "Smith", # 8/24-95 #, 12.345 oder 50,00 ?). Verwenden Sie einfache Anführungszeichen mit Zeichenfolgen und Nummernzeichen (#) mit Daten. Für Zahlen können Sie Dezimalzeichen, Dollarzeichen und die wissenschaftliche Notation. Wenn Operator LIKE Wert Platzhalter verwenden kann. Nur das Sternchen (1) und Prozent (%) signieren Platzhalter sind zulässig, und Sie müssen das letzte Zeichen der Zeichenfolge sein. Der Wert darf nicht Null sein.
Schritte zum Reproduzieren des Verhaltens
===========================

  1. Starten Sie ein neues Microsoft Visual Basic-Projekt. Form1 wird standardmäßig erstellt.
  2. Legen Sie einen Projektverweis auf Microsoft ActiveX Data Objects 2.x Library.
  3. Einfügen einer Befehlsschaltfläche auf dem Formular. Command1 wird standardmäßig erstellt.
  4. Fügen Sie in der Allgemein Deklaration-Abschnitt von Form1 den folgenden Code:
   Option Explicit
   Dim cn As New ADODB.Connection
   Dim rs As New ADODB.Recordset

   Private Sub Command1_Click()
       cn.Open "provider=SQLOLEDB;Data Source=<your data source>;User ID=<uid>;" _ 
    "password=;Initial Catalog=pubs;"
       On Error Resume Next
       cn.Execute "drop table tblFilterTest"
       On Error GoTo errh
       ' Create the test table
       cn.Execute "create table tblFilterTest(ID int primary key, Field1  
    varchar(20), Field2 varchar(20))"
       ' Open ADO recordset
       rs.Open "select * from tblFilterTest", cn, adOpenKeyset, 
    adLockOptimistic
       ' Add first record
       rs.AddNew
       rs("ID") = 1
       rs("Field1") = "A"
       rs("Field2") = "B"
       rs.Update
       rs.Requery
   
       ' Add 2nd record
       rs.AddNew
       rs("ID") = 2
       rs("Field1") = "D"
       rs("Field2") = "C"
       rs.Update
       rs.Requery
    
       ' Print original recordset
       Debug.Print "Original Recordset:"
       Debug.Print "====================="

       While Not rs.EOF
            Debug.Print rs("Field1") & vbTab & rs("Field2") 
             rs.MoveNext
       Wend

       rs.MoveFirst

       ' You get error 3001 on the following line
       rs.Filter = " Field1 > Field2 "

       ' To demonstrate the workaround, comment the preceding line and
       ' uncomment the following line:

       ' Call Filter
       Exit Sub

   errh:
       Debug.Print "Error Number:", Err.Number
       Debug.Print "Error Source:", Err.Source
       Debug.Print "Error Description:", Err.Description
   End Sub

   Private Sub Filter()
       Debug.Print "Filtered Recordset: "
       Debug.Print "====================="
    
       While Not rs.EOF
         If rs("Field1") > rs("Field2") Then
             Debug.Print rs("Field1") & vbTab & rs("Field2") 
         End If
         rs.MoveNext
       Wend
   End Sub
				
Drücken Sie F5, um das Projekt und Fehler 3001 ausgeführt wird.

Informationsquellen

Weitere Informationen finden Sie in der Hilfe von ADO-Dokumentation.
Weitere Informationen finden Sie in der folgenden Artikel der Microsoft Knowledge Base:
195222PRB: ADO Find-Methode nur unterstützen eine Kriterien

Eigenschaften

Artikel-ID: 216873 - Geändert am: Freitag, 24. August 2001 - Version: 1.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.01
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.1 Service Pack 2
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.7
Keywords: 
kbmt kbcode kbdatabase kbfix kbprb KB216873 KbMtde
Maschinell ü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: 216873
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.
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com