PRB: Chyba 3001 porovnání pole jako kritéria filtrování Recordset

Překlady článku Překlady článku
ID článku: 216873 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Příznaky

Porovnání dvou polí v řetězci kritérií vlastnost ADO filtr (například: řetězec kritéria je tvořena klauzulí ve formuláři: "NázevPole NázevPole operátor „) generuje následující chybě:
Chyba runtime '3001:
Aplikace používá argumenty, které jsou chybného typu, jsou mimo přijatelný rozsah nebo vzájemně kolidují.

Příčina

Tato funkce nemůže být provedeno s aktuální verzí ADO. Syntaxe kritérií vlastnost ADO filtr je definována následujícím způsobem:
"NázevPole operátor 'Literal_Value"
Typ dat 'Literal_Value může být řetězec, číslo nebo datum. Předcházejícího výrazu nelze použít k porovnání dvou polí. Chyba 3001 pokusu provést zvýší.

Řešení

Jeden řešením je mít několik výrazů připojen logické operátory jako kritéria filtru. Pokud tato lze použít pouze hodnoty porovnávané polí označují vývojář. Tímto způsobem Vývojář mohou pocházet s vzorec řetězec Kritéria splňující požadované výsledky. Například:
rs.Filter = "Field1 Operator1 'Value1' AND Field2 Operator2 'Value2'"
				

Pokud vývojář neznáte hodnoty pro pole1 a pole2, potom vývojář má provádět funkce dynamicky pomocí vlastní filtr rutina (v rámci aplikace klienta) nebo uložené procedury (na straně serveru). Můžete použít příkazy toku řízení v rámci vlastní filtr rutina (nebo uloženou proceduru) provést porovnání potřebná pole a generovat očekávané výsledky.

Tento článek poskytuje demonstrační rutina v tomto článku v části "Další informace".

Upozornění: Tato řešení uvedených v části Další informace je pouze dané pro účel ilustraci bez jakékoli záruky nebo mlčky, včetně, ale nikoli výhradně, předpokládaných záruk obchodovatelnosti nebo vhodnosti pro určitý účel.

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny na začátku tohoto článku.

Další informace

K nápovědě ADO uvádí následující výraz kritéria filtru metody--pod poznámky:

Řetězec kritéria je tvořena klauzulí ve formuláři NázevPole - hodnota operátor (například "Prijmeni = 'Svoboda'"). Vytvořit složený klauzule zřetězením jednotlivé klauzule s AND (například "Prijmeni = 'Svoboda' a jméno = 'Jan'") nebo OR (například "Prijmeni = 'Svoboda' nebo příjmení = 'Novák'").

Uvádí také následující pokyny pro hodnotu kritéria:

Hodnota je hodnota, pomocí kterého bude porovnávat hodnoty pole (například 'Svoboda', # 8/24/95 # 12.345 nebo 50,00 Kč). Pomocí jednoduchých uvozovkách řetězce a křížků (#) s daty. Pro čísla můžete použít desetinné čárky, znaky dolaru a matematický zápis. Pokud operátor je jako hodnota můžete použít zástupné znaky. Pouze hvězdičku (*) a znak procent (%) jsou povoleny zástupné znaky a musí být poslední znak v řetězci. Hodnota nemůže být NULL.
Kroky pro reprodukci chování
===========================

  1. Spusťte nový projekt Microsoft Visual Basic. Jako výchozí je vytvořen formulář Form1.
  2. Nastavit projektu odkaz na knihovnu Microsoft ActiveX Data Objects 2.x.
  3. Vložení příkazového tlačítka ve formuláři. Ve výchozím nastavení vytvořen Command1.
  4. Do části Obecné deklarace Form1 vložte následující kód:
   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
				
Stisknutím klávesy F5 spuštění projektu a chyba 3001 dochází.

Odkazy

Další informace naleznete v dokumentaci nápovědy ADO.
Další informace naleznete v následujícím článku databáze Microsoft Knowledge Base:
195222PRB: ADO najít pouze kritéria podporuje jedna metoda

Vlastnosti

ID článku: 216873 - Poslední aktualizace: 24. srpna 2001 - Revize: 1.0
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbmt kbcode kbdatabase kbfix kbprb KB216873 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:216873
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu

 

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