2014-09-03 44 views
5

Sto provando a filtrare i record usando "Mi piace" con gli asterischi, funziona quando si utilizza Access 2010 restituendo molti record. Sono perplesso perché restituisce nulla se utilizzato con ADO. Il codice include più tabelle e colonne, quindi per la risoluzione dei problemi ho effettuato una query semplice. Ecco il codice:L'operatore "LIKE" funziona in MS Access, ma non ADO

strsql = "SELECT tproducts.Prod_Name FROM tproducts " _ 
& " WHERE tproducts.Prod_Name Like " & Chr(34) & "SO*" & Chr(34) 

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

' test here 
iRecCount = rs.RecordCount 
rs.MoveFirst 

Il conteggio dei record -1.

Quando "Mi piace" è sostituito da "uguale a" restituisce record corretto, quindi sono sicuro che è in grado di connettersi al database, ad esempio:

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

C'è un modo speciale di usare il come operatore in ADO?

Quali altri modi posso filtrare per dare risultati uguali all'utilizzo di "Mi piace"? Ad esempio, per trovare tutti i prodotti "SVD"?

risposta

5

In MS Access, il carattere jolly è quasi sempre *, al di fuori di MS Access è quasi sempre%, in modo da

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

Tuttavia, vi raccomando vivamente che si sposta ai parametri per evitare una serie di problemi gravi .

DAO è di gran lunga la scelta migliore per ACE/Jet (ad esempio ruvida Loop table rows in Access, with or without use of Private Const)

+0

Sì, ho usato asterisco jolly. Un tempo era connesso a un database Mysql e utilizza%, tuttavia% non restituisce nulla in MS Access. Ho testato le dichiarazioni direttamente su MS Access. – Ponytell

+0

Si sta utilizzando ADO, in modo che sia%, non * Se si sta lavorando con ACE/Jet, è molto più efficiente utilizzare DAO. – Fionnuala

+0

La query viene appena passata tramite ADO al motore di accesso (motore JET). ADO non analizza la query stessa. – Zippit

1

Non si può contare su RecordCount. Ritorna spesso -1 anche se le righe sono state restituite. Restituisce solo il conteggio effettivo se si utilizza un cursore laterale client.

Invece, utilizzare rs.EOF per verificare la fine del recordset. Prova qualcosa di simile al seguente:

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

Ma il problema è che "Mi piace" non restituisce sempre alcun record. – Ponytell

+0

Come fai a sapere che non viene restituito alcun record? Come ho detto sopra, se si controlla solo rs.recordCount, si sbaglia. È necessario controllare per rs.eof – Zippit

+0

rs.movenext errore restituito: Errore di runtime '3021'. O BOF o EOF è vero o il record corrente è stato cancellato. – Ponytell