2016-06-21 1 views
2

J'ai une table Table1 dans Access 2016 (clé primaire = Code) avec les valeurs suivantes:Pourquoi ADO recordset retour plus d'enregistrements que la requête d'accès sous-jacente

=====+============= 
Code + Name 
=====+============= 
A1 | AU All 
A2 | AU Large 
A3 | AU Size 
A4 | Unassigned 
=====+============= 

Et j'ai une requête, Query1 définie comme :

SELECT Table1.Code 
FROM Table1 
WHERE (((Table1.Name) Not Like "AU *")); 

Dans Access, la requête renvoie 1 enregistrement, comme prévu:

Code 
====== 
A4 
====== 

Mais, quand j'ouvre la requête en utilisant ADO 2.8 ou 6.1, en utilisant ce code:

Option Compare Database 
Option Explicit 

Sub test() 
    Dim rst As ADODB.Recordset 
    Set rst = New ADODB.Recordset 

    With rst 
    .Open "Query1", CurrentProject.Connection, adOpenStatic, adLockReadOnly 
    Do While Not .EOF 
     Debug.Print .Fields("Code").Value 
     .MoveNext 
    Loop 
    Debug.Print "Record Count : " & .RecordCount 
    .Close 
    End With 

End Sub 

Tous les 4 enregistrements sont renvoyés, comme en témoigne la sortie de débogage:

A1 
A2 
A3 
A4 
Record Count : 4 

Pourquoi suis-je recevoir des résultats différents?

+1

changer le caractère de wild card de * à% – nazark

+0

@nazark, il est MS Access, pas SQL server! –

+0

Essayez de remplacer le nom de la requête par son contenu! Laissez-moi savoir ce qui se passe. –

Répondre

4

essayer caractère générique de * à% comme

.Open "SELECT Table1.Code FROM Table1 
WHERE (((Table1.Name) Not Like 'AU %'))", 
CurrentProject.Connection, adOpenStatic, adLockReadOnly 

voir pour plus details

+3

Vous avez raison, en changeant le caractère générique à '%' dans la requête sous-jacente, ou en spécifiant la requête en SQL (et en utilisant le caractère générique '%' dans l'appel ADO) produisent tous les deux la sortie attendue. J'ai pris des décisions conscientes dans le passé pour utiliser DAO en travaillant * dans * Access ... – ThunderFrame

+2

Vous pouvez également utiliser 'ALIKE' au lieu de' LIKE' dans vos requêtes enregistrées si vous voulez un comportement plus cohérent entre l'exécution interne et externe –

+0

Merci @GordThompson, je suis allé avec l'approche 'ALiKE', dont je ne savais même pas l'existence jusqu'à votre commentaire: jusqu'où cela fonctionne-t-il dans les expressions Access? – ThunderFrame