PRB: Fout 3001 vergelijken van velden als criterium voor het filteren van record set

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 216873 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Symptomen

Vergelijking van twee velden in de criteriareeks van de ADO-eigenschap Filter (bijvoorbeeld: de criteriareeks bestaat uit componenten met de notatie: 'FieldName Veldnaam Operator') genereert de volgende fout:
Runtime-fout '3001':
De toepassing gebruikmaakt van argumenten die van het verkeerde type, valt buiten het acceptabele bereik of zijn in conflict met elkaar.

Oorzaak

Deze functie kan niet worden uitgevoerd met huidige versies van ADO. De syntaxis van de criteria van de ADO-eigenschap Filter wordt als volgt gedefinieerd:
'Veldnaam Operator 'literal_value' '
Het gegevenstype 'literal_value' kan worden teken reeks, getal of datum. U niet de voorafgaande expressie gebruiken om te vergelijken twee velden. Doet 3001 fout genereert.

Oplossing

Een tijdelijke oplossing is dat meerdere expressies samengevoegd door de Booleaanse operatoren als Filter criterium. U kunt alleen gebruiken als het bekend dat de waarden van velden in vergelijking met de ontwikkelaar. Op deze manier de ontwikkelaar kunt bedenken met een formule voor de criteriareeks die voldoet aan de vereiste resultaten. Bijvoorbeeld:
rs.Filter = "Field1 Operator1 'Value1' AND Field2 Operator2 'Value2'"
				

Als de ontwikkelaar niet welke waarden voor Field1 en Field2 weet, heeft de ontwikkelaar een aangepast Filter routine (in de clienttoepassing) of een opgeslagen procedure (aan de server zijde) gebruiken de functie dynamisch uitvoeren. U kunt instructies voor data transport besturing binnen de aangepaste routine Filter (of de opgeslagen procedure) de vereiste veld vergelijkingen uitvoeren en de verwachte resultaten genereren.

Dit artikel bevat een demonstratie voor routines in de sectie "Meer informatie" van dit artikel.

Waarschuwing: De oplossing die in de sectie 'MEER informatie alleen gegeven voor illustratie doeleinden zonder enige garantie of impliciete, met inbegrip van maar niet beperkt tot, de impliciete garanties van verkoopbaarheid en/of geschiktheid voor een bepaald doel.

Status

Microsoft heeft bevestigd dat dit is een probleem in de Microsoft-producten die aan het begin van dit artikel worden vermeld.

Meer informatie

De Help van de ADO-documentatie staat de volgende informatie over de methode Filter criterium expressie - onder Opmerkingen:

De criteriareeks bestaat uit componenten in het formulier FieldName - Operator - waarde (bijvoorbeeld "Achternaam = 'Smits'"). U kunt samengestelde componenten maken door afzonderlijke componenten met AND (bijvoorbeeld "Achternaam = 'Smits' en voornaam = 'Jan' ') of of (bijvoorbeeld" Achternaam = 'Smits' of achternaam = "Jansen" ").

Het staat ook de volgende richtlijnen voor de criterium waarde:

Waarde is de waarde waarvan u de veld waarden vergelijkt (bijvoorbeeld, 'Smits', # 8/24/95 #, 12.345 of $50,00). Gebruik enkele aanhalings tekens met teken reeksen en hekjes (#) met datums. U kunt voor getallen, decimaal tekens, dollartekens en wetenschappelijke notatie gebruiken. Als de Operator LIKE is, waarde kunt joker tekens gebruiken. Alleen het sterretje (*) en het procent teken (%)) joker tekens zijn toegestaan en deze moeten het laatste teken in de teken reeks. Waarde kan niet Null zijn.
Stappen om het gedrag te reproduceren
===========================

  1. Start een nieuwe Microsoft Visual Basic-project. Form1 wordt standaard gemaakt.
  2. Een Project verwijzing naar het Microsoft ActiveX Data Objects 2. x Bibliotheek.
  3. Voeg een opdracht knop op het formulier. Command1 wordt standaard gemaakt.
  4. Voeg de volgende code in de algemene declaratie sectie van Form1:
   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
				
Druk op F5 om het uitvoeren van het project en 3001 fout optreedt.

Referenties

Raadpleeg de Help van de ADO-documentatie voor meer informatie.
Raadpleeg het volgende artikel in de Microsoft Knowledge Base voor meer informatie:
195222PRB: Methode alleen ondersteunt 1 Criteria voor ADO zoeken

Eigenschappen

Artikel ID: 216873 - Laatste beoordeling: maandag 28 februari 2011 - Wijziging: 2.0
De informatie in dit artikel is van toepassing op:
  • Microsoft ActiveX Data Objects 2.7
Trefwoorden: 
kbcode kbdatabase kbDSupport kbprb kbmt KB216873 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:216873
Vrijwaring inhoud KB-artikelen over niet langer ondersteunde producten
Dit artikel heeft betrekking op producten waarvoor Microsoft geen ondersteuning meer biedt. Daarom wordt dit artikel alleen in de huidige vorm aangeboden en wordt het niet meer bijgewerkt.

Geef ons feedback

 

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