MS Access 查询返回汉字 - 可能的表损坏?

Posted

技术标签:

【中文标题】MS Access 查询返回汉字 - 可能的表损坏?【英文标题】:MS Access query returning Chinese characters - possible table corruption? 【发布时间】:2015-02-28 00:20:48 【问题描述】:

我将新版本的数据复制并粘贴到我的 MS Access 表中,现在我的查询中出现了奇怪的字符。基本上,如果我说:

SELECT a, b from table1

一切都很好。如果我改为这样做

SELECT a, b from table1 group by a, b

结果我得到了非常奇怪的字符。一开始我把L颠倒了,但现在我得到了汉字。这很奇怪,因为我的数据库中的其他查询使用该表并获得所需的输出。似乎只有当我进行分组时,我才会遇到问题。有什么建议么?我已准备好推出它,但现在我遇到了这些错误!

【问题讨论】:

您如何连接到您的 Access 数据库并从中读取数据? (您在哪个程序中运行查询?)。您使用的是什么排序规则? 我正在 VBA 的子例程中构建查询。然后我设置一个等于查询的列表框行源。但是,即使我只是在 Access 的查询生成器中编写查询,我也会看到同样的情况。在我更新数据之前我没有得到这个。 请发布屏幕截图,其中包括您看到的结果以及表格视图中的数据。 【参考方案1】:

如果在备注字段上进行分组,通常会遇到此错误。

根据您的需要,可能有几种解决方法:

Select 
    a, Left(b, 255) As b
From 
    table1 
Group By 
    a, Left(b, 255)

Select 
    a, Mid(b, 1) As b
From 
    table1 
Group By 
    a, Mid(b, 1)

Select 
    a, First(b) As firstb
From 
    table1 
Group By 
    a

Select 
    a, DLookUp("b","table1","Id = " & [table1]![Id] & "") AS b
From 
    table1 
Group By 
    a, DLookUp("b","table1","Id = " & [table1]![Id] & "")

【讨论】:

这很荒谬,但很高兴知道!非常感谢。这解决了问题。 我使用了第一个使用 Left 函数的示例。 Select a, Left(b, 255) As b From table1 Group By a, Left(b, 255) 加上一个让我在“备忘录字段”参考的正确轨道上。【参考方案2】:

这是另一种选择,我刚刚尝试成功。我正在更新其他人创建的查询,作者已将 Group By 子句中的每个字段都包含在内,以返回不同的记录。我删除了整个 Group By 子句并在 SELECT 之后插入了 DISTINCT。没有中文了。在某些情况下这可能是不可能的,但在这种情况下,这是一个简单的解决方法。

另外,如果不是上面提供的见解,我不会想到这一点。谢谢大家!

【讨论】:

【参考方案3】:

我刚刚在各种报告中遇到了同样的问题。问题确实是备忘录字段。

对我有用的解决方案更直接...我必须删除备忘录字段的“分组依据”,问题就消失了。

我意识到这可能不是在所有情况下都可以选择的,但如果是这样,这是最简单的解决方案,因为它不需要重写 SQL,甚至不需要对数据库进行任何其他更改。

我在这里找到了这个解决方案:Allen Brown - Grouping by Memo field yields garbage

【讨论】:

【参考方案4】:

在五个月没有问题之后,我今天在一个包含“计数”字段的组查询中遇到了这个问题,因此“DISTINCT”技术不起作用。我所做的是将我的 LongText 字段包裹在有问题的字段周围。在此表中,除“描述”外,所有字段均为短文本。所以 CSTR([Description]) 的字段组 - 现在它工作正常!顺便说一句 - 这是在 MS Office 365 更新后不久出现的!

【讨论】:

以上是关于MS Access 查询返回汉字 - 可能的表损坏?的主要内容,如果未能解决你的问题,请参考以下文章

不通过 C# 从 ms access 数据库返回任何数据,如果我在 ms access 上运行相同的查询,它将获取数据

查询不会更新子窗体 MS-Access 中的表

返回基于多个条件 SQL、MS Access 的非不同行

在 MS Access 上返回行号

如何使用查询或 VBA 和 SQL 更新 MS ACCESS 中的表

MS Access 查询:合并特定字段列中具有相同数据的行