MS Access“ORDER BY”排序算法

时间:2012-07-16 08:24:54

标签: ms-access sorting comparison

好人,

我观察到MS Access ORDER BY子句以非ASCII方式对记录进行排序。这与MySQL不同 - 通常是ASCII兼容的。让我给你一些背景知识,让你明白为什么这对我来说是一个问题。

早在2010年,我写了一个通用的数据库事务记录器。目标是检测(理论上)任何SQL数据库发生的更改并将其记录在另一个数据库中。为此,我使用了一个影子MySQL数据库,我在其中维护整个源数据库的副本。影子数据库是使用EAV模型设计的,因此它与源数据库模式无关。

每隔一段时间,我都会读取源数据库和影子数据库,根据主键对记录进行排序,并将记录格式化为一对一。然后,我使用合并算法进行完整的数据库比较。

此解决方案一直运行正常,直到上周,当用户使用字符串主键(并非始终是字母数字)对Access数据库进行设置时。软件突然开始记录源数据库中没有发生的鬼事务。

仔细研究后,我发现MS Access以不同于MySQL的方式命令非字母数字字符。因此,我的合并算法(它假定源记录和影子记录的排序顺序相似)开始失败。

现在,我已经找到了一种方法,可以在使用之前调整我的软件来“修复”这些主键,但如果我确切知道MS Access的订购方案的性质,那将会有很大帮助。任何想法都将受到高度赞赏。

PS:请告诉我是否需要澄清。我试图避免输入太多可能没用的内容。

1 个答案:

答案 0 :(得分:0)

几年前,我遇到了困难。对不起,我没有保留解决方案,但它使用的是VBA,并不简洁或优雅。

我将表打开为DAO记录集,在记录中前进,并使用strcomp()函数来比较密钥。我使用strcomp()的二进制/文本选项进行了很多实验,我相信最终需要插入一个错误处理组件!

discussion可能相关。还有thisthis