2009-04-09 2 views
1

База данных доступа MS не позволяет сравнивать поля с типом данных memo в SQL-запросе. Есть ли способ сделать это в VBA?Как сравнить поля с типом данных «Memo» в vba?

Простое сравнение не работает, если размер памятки> 255 символов

+0

Можете ли вы предоставить запрос, который вы пытаетесь запустить? Является ли это связанной таблицей с SQL? Я сделал тест и не испытывал никаких проблем с сопоставлением значений memo. – JohnFx

+0

Комментарий Onedayone ниже, где вам нужно начать. Если ваш запрос имеет GROUP BY или UNION (или в некоторых версиях Access, имеет ORDER BY), он обрезает заметки до 255 символов. –

ответ

2

При использовании записей, вы можете сравнить их.

Таблица: Таблица1 (интермедиат, памятка, памятка)

id memo1  memo2 
1 A   B 
2 D   C 

Сценарий:

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 

И выход:

False 
True 

Это то, что вы имеете в виду?

UPDATE: она отлично работает для меня с полями длиной 4000 символов вверх, просто тестировал, а также функция длины отлично работает (VBA от доступа 2003)

Привет, питер

+0

Это не работает, если размер memo> 255 символов –

+0

просто сделал быстрый тест, и со мной работает fint (я тестировал оператор '=', сравнивая текст из wikipedia, True, когда он идентичен, False при изменении точки в конце страницы) Длина поля 4264, оператор длины также работал. – Peter

+0

Я не уверен, почему вы разместили пример ADO, учитывая, что он находится в VBA в Access. Мне кажется, что DAO станет очевидным выбором для чего-то подобного. –

0

Вы, наверное, что-то конкретное в виду, но это простой случай хорошо работает без ошибок:

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 
    ; 

Я знаю, что это отсекает на 255 символов. Это ваша проблема? - Изменить: я тестировал его со значениями, превышающими 255 символов, и он не усекается.

+0

255 символов - проблема –

+0

Мои тесты показывают, что усечение не отображается с сравнением сравнений. Возможно, вы делаете что-то еще, чтобы вызвать усечение, например. Возможно, GROUP BY или UNION? – onedaywhen

-1

Я думаю, что лучший способ - сохранить два поля Memo в 2 файла, а затем выполнить сравнение с файлами.

Смежные вопросы