【问题标题】:Memo fields showing chinese characters or symbols instead of actual value when records number reach a certain point当记录数达到某个点时,备注字段显示中文字符或符号而不是实际值
【发布时间】:2014-07-24 14:40:22
【问题描述】:

这是我在这里的第一篇文章,我是数据库新手。我试图找到答案,但我不确定我是否理解它如何适用于我的案例。

我的访问程序会生成一个包含不同类型字段(自动编号、短文本、备忘录)的查询,然后用于创建报告。
到目前为止,它一直运行良好,但是自从数据库增长以来,我遇到了问题。

我使用ID(主键)IN() where 条件来过滤报表。我制作了一个长字符串来获取所选记录的所有 id:

WHERE ID IN (1200,1201,1203,1226,1227,1228,1229,...)

当查询中达到一定数量的字符(大约 4000 个)时,我得到的是中文字符,而不是查询结果的所有备注字段,并且只有备注字段(然后在报告中)。

查询大小有限制吗?不是32000字吗?
为什么这些字符只有在我选择太多记录时才会显示?

是否有替代 IN () 可以帮助我减少查询长度或我应该完全避免备注字段?

编辑:这就是查询(为了便于阅读而删减了一点):

SELECT ObjetsLegislatifs.IDobjet, ObjetsLegislatifs.TitreObjet, ObjetsLegislatifs.ContenuObjet
FROM ObjetsLegislatifs
WHERE IDobjet IN(1200,1201,1203,1226,1227,1228,1229,1230,1231,1232,)
GROUP BY ObjetsLegislatifs.IDobjet, ObjetsLegislatifs.TitreObjet, ObjetsLegislatifs.ContenuObjet
ORDER BY ObjetsLegislatifs.IDobjet;

基本上,IDobjet 是一个自动编号,“TitreObjet”和“ContenuObjet”是备忘录字段。 虽然 IDobjet 总是显示正确的数字,但当查询太长时,当达到某个阈值时,备注字段开始显示中文。我尝试在查询中使用文本字段,它们工作正常。

【问题讨论】:

  • 嗯,这是第一次......我以前从未听说过它被称为“数据库”。但是最好使用临时表并 Joining 到它,而不是列出 4000 个 In 参数。
  • 您可以发出多个请求,每个请求的长度不超过 4000,然后UNION 结果。
  • @RomanBK 我已经稍微编辑了你的问题。我不清楚的是:“查询结果的备注字段”是什么?您选择的数据是什么(SQL 语句的第一部分)?请add that to your question
  • 坦克很多!我将使用临时表。我发现有时它无法真正处理的访问提供选项令人厌烦......
  • @JanDoggen 我编辑了这个问题,希望它可以帮助别人!谢谢你的帮助。抱歉,拖了这么久。

标签: sql ms-access


【解决方案1】:

最好的办法是创建一个临时表(这是一种特殊类型的表 - 请参阅 here),其中包含一个 ID 列。

生成查询时,您可以将 ID 插入此表并加入该表,而不是使用 IN list,如下所示:

select a.*
from table a
INNER JOIN temp_table b ON a.ID = b.ID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多