MS Access Memo字段被截断

时间:2017-05-17 14:46:54

标签: sql vba ms-access truncate memo

这个问题听起来很熟悉,但请将其读到最后,因为它与我在本论坛或其他地方发现的类似问题有所不同。 我正在使用Access 2010构建一个简单的应用程序来创建一些代码以在另一个系统中执行。部分原因是将每个用户的记录数转换为单个记录,所有用户条目用逗号分隔。为了说明,这是我输入的样本:

USER    MBR
----    ---- 
USR1    DRG 
USR1    ABC 
USR1    XYZ 
USR2    123A 
USR2    ABS2

我需要这种格式:

USER   MBR_LIST
-----  ---------------
USR1   DRG, ABC, XYZ
USR2   123A, ABS2

到目前为止,如此熟悉。我已经使用了Allen Brown在2008年发布的代码(http://allenbrowne.com/func-concat.html),但我遇到了一个问题。 代码工作正常 - 当我调试它时,我可以看到我的输出字符串(" strOut")具有单个用户的所有MBR,如预期的那样。请注意,有时这个字符串超过7,000个字符长。所以,再次根据周围的一些很好的建议,我创建了一个MBR_LIST字段设置为MEMO的表,并执行Allen的功能:

INSERT INTO Table2 ( [USR], MBR_LIST )
SELECT B.USR, ConcatRelated("MBR","Table1","Table1.USR = '" & B.USR & "'","USR") AS Mbr_List
FROM (SELECT Table1.USR FROM Table1 GROUP BY Table1.USR)  AS B;

(注意:查询是这样构建的,以避免在备注字段上执行分组,这已知是截断备注字段)

仍然,在执行此操作后,表中的MBR_LIST字段仅显示320个字符(?)。

我甚至尝试添加一个空行,如本文所述:MS Access Create Table is Truncating Memo Field,但没有成功 - 该字段仍被截断为320个字符:

INSERT INTO Table2 ( [USR], MBR_LIST )
SELECT B.USR, "" as Mbr_List
FROM [Table2] as B Where (False)
UNION ALL
SELECT B.USR, ConcatRelated("MBR","Table1","Table1.USR = '" & B.USR & "'","USR") AS Mbr_List
FROM (SELECT Table1.USR FROM Table1 GROUP BY Table1.USR)  AS B;

作为最后的手段,使用MID()我创建了20" chunk"在我的SELECT语句中,每个300个字符(Mbr_1到Mbr_20),我把它们都弄好了。然后我将这个包装成另一个SELECT,并将这些块连接起来(Mbr_1& Mbr_2& ...& Mbr_20)AS Mbr_LIST,得到 - 320个字符!

任何想法为什么以及如何插入/显示函数创建的完整字符串?

谢谢, 部落

1 个答案:

答案 0 :(得分:0)

我在多年前使用辅助函数中的 DLookup 创建了一种解决方法。

当然不是最快的,但如果还有其他事情失败......

Access Query truncates Memo Field

要插入长文本,请在检索USR和MBR_LIST的值时使用VBA:

Dim rs As DAO.Recordset

Set rs = CurrentDb.OpenRecordset("Select [USR], MBR_LIST From Table2")

rs.AddNew
    rs!USR.Value = USR
    rs!MBR_LIST.Value = MBR_LIST
rs.Update
rs.Close

Set rs = Nothing