2014-09-03 103 views
5

"Beğen" i kullanarak yıldızları birleştirmeye çalışıyorum, Access 2010'u birçok kayıt döndürürken çalışıyor. ADO ile kullanıldığında neden hiçbir şey döndürmediğine şaşırdım. Kod, birden fazla tablo ve sütun içerir, böylece basit bir sorgulama yaptım. İşte kod: -1 döndürür."LIKE" operatörü MS Access'te çalışıyor, ancak ADO değil

"Beğen" "eşittir" yerine ne zaman örneğin, veritabanına bağlanmak mümkün eminim bu yüzden doğru kaydı döndürür

:

strsql = "SELECT tproducts.Prod_Name FROM tproducts " _ 
& " WHERE tproducts.Prod_Name = " & Chr(34) & "SONY Vaio SVD13213CXB" & Chr(34) 

Beğen kullanmak için özel bir yolu var mı ADO içinde operatör?

"Beğen" işlevinin kullanımıyla aynı sonuçları vermek için başka hangi yöntemleri filtreleyebilirim? Örneğin, tüm "SVD" ürünlerini bulmak için? MS Access o kadar, neredeyse her zaman Ancak

str = "SELECT tproducts.Prod_Name FROM tproducts) " _ 
& " WHERE tproducts.Prod_Name Like ""SO%""" 

% dışarıdan

MS Access

cevap

5

, joker ciddi bir takım sorunlar önlemek için parametrelere hareket olduğunu şiddetle tavsiye, * neredeyse her zaman olduğu .

DAO ACE/Jet için çok daha iyi bir seçim (kaba örnek Loop table rows in Access, with or without use of Private Const) Sen RecordCount güvenemeyiz

+0

Evet, yıldız joker karakteri kullandım. Bir Mysql veritabanına bağlanır ve% kullanılır, ancak,% MS Access'te hiçbir şey döndürmez. İfadeleri doğrudan MS Access'e test ettim. – Ponytell

+0

ADO kullanıyorsunuz, bu yüzden%, değil * ACE/Jet ile çalışıyorsanız, DAO'yu kullanmak çok daha verimlidir. – Fionnuala

+0

Sorgu, yalnızca ADO aracılığıyla Access motoruna (JET engine) aktarılıyor. ADO, sorgunun kendisini ayrıştırmaz. – Zippit

1

gereğidir. Satırlar döndürülse bile, genellikle -1 değerini döndürür. Bir istemci tarafı imleci kullanıyorsanız, yalnızca gerçek sayımı döndürür. Bunun yerine, kayıt kümesinin sonunu denetlemek için rs.EOF kullanın. Aşağıdaki gibi deneyin:

Set cn = New ADODB.Connection 
cn = connString 
cn.Open 
Set rs = New ADODB.Recordset 
rs.Open strsql, cn, adOpenStatic, adLockOptimistic 

' very innefficient way to find the record count, but gives you the idea. If you just care about record count use "COUNT(*)" in your query 
do while not rs.eof 
    iRecCount = iRecCount + 1 
    rs.MoveNext 
loop 
+0

Ama sorun şu ki "Beğen" her zaman bir kayıt döndürmez. – Ponytell

+0

Herhangi bir kayıt döndürmediğini nereden biliyorsunuz? Yukarıda bahsettiğim gibi, sadece rs.recordCount'u kontrol ediyorsanız, yanılıyorsunuz. Rs.eof – Zippit

+0

rs.movenext döndürme hatası için kontrol etmeniz gerekiyor: Çalışma zamanı hatası '3021'. BOF veya EOF doğru veya geçerli kayıt silinmiştir. – Ponytell