这个问题听起来很熟悉,但请将其读到最后,因为它与我在本论坛或其他地方发现的类似问题有所不同。 我正在使用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个字符!
任何想法为什么以及如何插入/显示函数创建的完整字符串?
谢谢, 部落
答案 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