Je bent nu offline; er wordt gewacht tot er weer een internetverbinding is

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

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.
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. xBibliotheek.
  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

Waarschuwing: dit artikel is automatisch vertaald

Eigenschappen

Artikel-id: 216873 - Laatst bijgewerkt: 02/28/2011 07:01:00 - Revisie: 2.0

Microsoft ActiveX Data Objects 2.7

  • kbcode kbdatabase kbDSupport kbprb kbmt KB216873 KbMtnl
Feedback