2009-04-09 16 views
1

La base de données MS Access n'autorise pas la comparaison de champs avec des types de données 'memo' dans une requête SQL. Y a-t-il un moyen de le faire en VBA?Comment comparer des champs avec le type de données 'Memo' dans vba?

La simple comparaison ne fonctionne pas si la taille du mémo> 255 caractères

+0

Pouvez-vous fournir la requête que vous essayez d'exécuter? Est-ce une table liée à SQL? J'ai fait un test et n'ai eu aucun problème à comparer les valeurs de mémo. – JohnFx

+0

Le commentaire d'Onedayone ci-dessous est l'endroit où vous devez commencer. Si votre requête a un GROUP BY ou est un UNION (ou dans certaines versions d'Access, a un ORDER BY), il tronque les mémos à 255 caractères. –

Répondre

2

Lorsque vous utilisez un jeu d'enregistrements, vous pouvez les comparer.

Le tableau: Tableau 1 (int, mémo, mémo)

id memo1  memo2 
1 A   B 
2 D   C 

Le script:

Public Sub test() 

Dim conn As New ADODB.Connection 
Dim rst As New ADODB.Recordset 
Dim strSql As String 

Set conn = CurrentProject.Connection 
strSql = "select * from Table1" 

rst.Open strSql, conn 

rst.MoveFirst 
    While Not rst.EOF 
     Debug.Print rst("memo1") > rst("memo2") 
    rst.MoveNext 
Wend 

rst.Close 
conn.Close 

End Sub 

Et la sortie:

False 
True 

Est-ce que vous voulez dire?

MISE À JOUR: il fonctionne très bien pour moi avec des champs de longueur de 4000 caractères, juste testé, également la fonction de longueur fonctionne très bien (ABV accès 2003)

Salutations, Peter

+0

Cela ne fonctionne pas si la taille memo> 255 caractères –

+0

vient de faire un test rapide, et avec moi cela fonctionne fint (j'ai testé l'opérateur '=', en comparant le texte de wikipedia, Vrai quand identique, Faux en changeant un point à la fin de la page) La longueur du champ était 4264, l'opérateur de longueur a également travaillé. – Peter

+0

Je ne sais pas pourquoi vous avez posté un exemple ADO étant donné qu'il est dans VBA dans Access. DAO serait le choix évident pour quelque chose comme ça, me semble-t-il. –

0

Vous avez probablement quelque chose de spécifique à l'esprit, mais ce cas simple fonctionne bien sans erreur:

CREATE TABLE TestMemo (memo1 MEMO, memo2 MEMO) 
    ; 
    INSERT INTO TestMemo (memo1, memo2) VALUES ('Blah', 'Blah') 
    ; 

INSERT INTO TestMemo (memo1, memo2) VALUES ('123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A', '123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789A123456789Z') 
; 

    SELECT memo1, memo2 
     FROM TestMemo 
    WHERE memo1 = memo2 
    ; 

Je suis conscient que ce tronque à 255 caractères. Est-ce votre problème? - Edit: je l'ai testé avec des valeurs dépassant 255 caractères et il n'est pas tronqué.

+0

255 caractères est le problème –

+0

Mes tests montrent que la troncature ne montre pas avec une comparaison égale. Est-ce que vous faites peut-être autre chose pour causer la troncature, par exemple? GROUP BY ou UNION peut-être? – onedaywhen

-1

Je suppose que le meilleur moyen est de sauvegarder deux champs Mémo dans 2 fichiers, puis faire la comparaison avec les fichiers.

Questions connexes