如何从MS Access DB中删除镜像数据集?

时间:2014-03-12 08:20:48

标签: sql vba ms-access

我遇到了镜像数据集的问题。这种情况发生的原因是数据模型在几个月后被切换,我刚刚被分配到这个项目,该项目已经完成了新的应用程序和数据模型。

我的任务是将旧的MS Access应用程序中的所有数据导入到新的MS Access应用程序中以及错误来源的地方。旧数据模型的编写方式是每个数据集也作为其镜像对应物存储。想象一下像这样的数据库表:

pk | A |乙

1 |你好|世界

2 |世界|喂

我通过Excel和VBA编码通过自制的暂存过程导入数据,并且工作正常。登台是必要的,因为我想创建插入语句,因此必须将所有旧ID,名称......映射到新闻ID。

在导入完成后测试应用程序时,我意识到GUI显示所有数据集两次。 (它显示两次而不是一次,然后再以镜像形式显示的原因是我们填充显示结果的ListBox的方式)

我在镜像数据中发现了这个错误的原因,现在想摆脱它。我的第一个想法是相当长的,可能过于复杂,这就是我在这里发帖的原因,希望找到一个更短的解决方案。

所以,我的想法如下,并且只使用VBA编码:

  1. 使用SELECT * FROM mirroredDataTable
  2. 填充recordSet
  3. 编写一个SQL语句,并从1开始检查记录集中每条记录的语句结果的recordCount是否为> 1。)
  4. 如果resultCount为> 1,则该结果中的一个ID将写入新的recordSet或Array
  5. 再次解析来自4.的recordSet /数组,并为那里的每个ID创建一个DELETE语句
  6. ???
  7. 利润
  8. 现在我已经对2.)中的SQL语句有了一个想法,但在开始之前,我只是想确保没有" easy"我尚未考虑或只是忽视的方式。

    非常感谢您提供的任何帮助/信息/提示。

    PS:重新设计整个数据模型或其中的某些内容(不是我的决定)不是一个选项

1 个答案:

答案 0 :(得分:1)

感谢@Gord Thompson我能够在纯粹的SQL基础上解决这个问题。有关详细解决方案,请参阅此子线程的答案:How to INTERSECT in MS Access?