Как сравнить поля с типом данных «Memo» в vba? - PullRequest
1 голос
/ 09 апреля 2009

База данных MS access не позволяет сравнивать поля с типами данных memo в запросе SQL. Есть ли способ сделать это в VBA?

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

Ответы [ 3 ]

2 голосов
/ 09 апреля 2009

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

Таблица: Table1 (int, memo, memo)

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

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

ОБНОВЛЕНИЕ: у меня это отлично работает с полями длиной 4000 символов, только что проверил, также отлично работает функция длины (vba из access 2003)

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

0 голосов
/ 09 апреля 2009

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

0 голосов
/ 09 апреля 2009

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

    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 символов, и он не обрезается.

...