2009-04-09 41 views
1

MS访问数据库不允许在SQL查询中将字段与“备注”数据类型进行比较。有没有办法在VBA中做到这一点?如果备忘录> 255个字符如何比较vba中'备注'数据类型的字段?

+0

你能提供你正试图运行的查询吗?这是SQL的链接表吗?我做了一个测试,并且没有任何比较备忘值的麻烦。 – JohnFx 2009-04-09 18:43:43

+0

Onedayone的评论下面是你需要开始的地方。如果您的查询具有GROUP BY或UNION(或在某些版本的Access中,具有ORDER BY),它会将备忘录截断为255个字符。 – 2009-04-09 21:53:43

回答

2

当使用记录的大小,可以对它们进行比较

简单的比较不工作。

表:表1(INT,备忘录,备忘录)

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从进入2003)

问候,彼得

+0

如果备忘录大小大于255个字符,它就不起作用 – 2009-04-09 09:57:31

+0

只是做了一个快速测试,对我来说它工作得很好(我测试了'='运算符,比较了维基百科的文本,相同时为真,改变点时为False在页面的末尾) 字段的长度是4264,长度运算符也工作。 – Peter 2009-04-09 10:21:05

+0

我不确定你为什么发布ADO示例,因为它在Access中的VBA中。在我看来,DAO将是这类事情的明显选择。 – 2009-04-09 21:51:16

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个字符是问题 – 2009-04-09 10:01:38

+0

我的测试显示截断不会在等于比较时显示。您是否正在做其他事情来导致截断GROUP BY或UNION也许? – onedaywhen 2009-04-09 11:26:26

-1

我想最好的办法是将两个备忘录字段保存到2个文件中,然后与文件进行比较。