Teď jste offline a čekáte, až se znova připojí internet.

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

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

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 216873 - Poslední kontrola: 08/24/2001 08:40:00 - Revize: 1.0

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

  • kbmt kbcode kbdatabase kbfix kbprb KB216873 KbMtcs
Váš názor