SORUN: <a1>hata</a1> 3001 karşılaştırma alanları Recordset filtre için ölçüt olarak

Makale çevirileri Makale çevirileri
Makale numarası: 216873 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Belirtiler

ADO Filter özelliğini, <a1>Ölçüt</a1> dizesinde iki alanı karşılaştırmak (örneğin: Ölçüt dizesi yan tümceleri formunda oluşur: "AlanAdı işletmen AlanAdı") aşağıdaki hata üretir:
Çalışma zamanı hatası '3001':
Uygulama yanlış türde, kabul edilebilir aralığın dışında veya birbiriyle çelişen değişkenler kullanmaktadır.

Neden

Bu işlev geçerli ADO sürümleriyle gerçekleştirilmesi edemiyor. ADO Filter özelliğini ölçüt sözdizimi aşağıdaki gibi tanımlanır:
"AlanAdı operator 'Literal_Value'"
'Literal_Value' veri türü dizesi, sayı veya tarih olabilir. Önünde gelen ifadenin, iki alanı karşılaştırmak için kullanamazsınız. Bunu yapmak çalışan <a1>hata</a1> 3001 yükseltir.

Çözüm

Bir geçici çözüm, süzgeç ölçütü olarak Boolean işleçleri olarak birleştirilmiş birkaç ifadeler almaktır. Bu, yalnızca kullanabileceğiniz karşılaştırılan alanların değerleri, geliştiriciler için denir. Bu şekilde geliştirici için gerekli sonuçları karşılayan Ölçüt dizesi bir formülle gelebilir. Örneğin,:
rs.Filter = "Field1 Operator1 'Value1' AND Field2 Operator2 'Value2'"
				

Geliştirici alan1 ve alan2 değerleri bilmez, geliştirici veya özel bir süzgeç yordamına (istemci uygulama) içinde) hem de bir saklı yordam (sunucu tarafında) dinamik olarak işlevi yerine getirmek için kullanın... vardır. Akış denetimi deyimleri özel süzgeç yordamı (veya saklı yordam) gerekli alan karşılaştırmalar gerçekleştirmek ve beklenen sonuçları oluşturmak için kullanabilirsiniz.

Bu makalede, bu makalenin "Ek BILGI" bölümüne bir tür yordam için bir örnek sağlar.

UYARı: EK BILGILER</a0> bölümünde sağlanan geçici çözümü, yalnızca örnek amaçla da dahil, ancak bununla sınırlı olmamak kaydıyla, örtülü veya hiçbir garanti olmadan satılabilirlik ve/veya belirli bir amaca uygunluk zımni hiçbir garanti verilir.

Durum

Microsoft, bu makalenin başında listelenen Microsoft ürünlerinde bir sorun olduğunu onaylamıştır.

Daha fazla bilgi

ADO Yardım belgelerine süzgeç yöntemin ölçüt ifadesi--açıklamalar için aşağıdakileri belirtir:

Ölçüt dizesi yan tümceleri formunda AlanAdı - işletmen - değer oluşur (örneğin, "Soyad? = 'Etikan'"). Tek tek yan tümceleri ile birleştirerek, bileşik yan tümceler oluşturabilirsiniz VE (örneğin, "Soyadı = 'Etikan' AND Adı = 'Gamze'") veya VEYA (, "soyad 'Etikan' OR Soyad? = 'Can' =").

Ayrıca aşağıdaki yönergeleri için <a2>Ölçüt</a2> değerini belirtir:

Alan değerleri karşılaştıracaktır değer (örneğin, 'Etikan', # 8/24/95 #, 12.345 veya $ ortaya). Dizeler ve tarihleri, diyez işaretleri (#) ile tek tırnak işaretleri kullanın. Numaraları için ondalık noktalar, dolar işaretleri ve bilimsel gösterimde kullanabilirsiniz. Değer, joker karakterler kullanabilirsiniz LIKE işleci ise. Yalnızca yıldız işareti (*) ve yüzde (%) joker karakter izin verilir ve dizenin son karakteri olmaları gerekir. Değer null olamaz.
Davranışı yeniden oluşturma adımları
===========================

  1. Yeni bir Microsoft Visual Basic projesi başlatın. Varsayılan olarak, Form1 oluşturulur.
  2. Bir proje Microsoft ActiveX Data Objects 2.x kütüphanesine başvurular ayarlayın.
  3. Formdaki bir komut düğmesi ekleyin. Command1, varsayılan olarak oluşturulur.
  4. Aşağıdaki kodu genel bildirim'ın Form1 bölümüne ekleyin:
   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
				
Proje ve <a1>hata</a1> 3001'nı çalıştırmak için F5 tuşuna basarak oluşur.

Referanslar

Daha fazla bilgi için ADO Yardım belgelerine başvurun.
Ek bilgi için lütfen Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
195222SORUN: ADO <a1>Yöntem</a1> yalnızca destekleyen bir ölçüt Bul

Özellikler

Makale numarası: 216873 - Last Review: 24 Ağustos 2001 Cuma - Gözden geçirme: 1.0
Bu makaledeki bilginin uygulandığı durum:
  • 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
Anahtar Kelimeler: 
kbmt kbcode kbdatabase kbfix kbprb KB216873 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:216873
Kullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.

Geri Bildirim Ver

 

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