MS Access:需要高级设计建议

时间:2011-07-14 23:49:40

标签: database-design ms-access

我正在使用Access DB。此数据库的数据源是Excel电子表格。我需要添加一些功能,允许用户通过运行VBA函数来清理原始Excel数据,然后将此数据导入Access,而不导入重复记录。

关于如何处理这个问题,我有几个问题:

1)我应该在Excel中编写VBA程序和简单的GUI来清理数据,还是应该将其包含在允许用户将Excel数据导入表格的Access窗体中?换句话说,应该在Access中还是在Access外部清理数据?

2)防止将重复记录导入表格的最佳方法是什么?我应该编写VBA代码来执行此操作,还是应该设置表的属性(如果可以的话)?

3)我应该允许用户清理Excel中的数据,然后让用户在Access中使用导入向导来添加数据而不是在表单中编写代码以允许将数据导入数据表吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

如果用户完全可以访问Excel文件,那么您需要将其视为不受信任/不干净的数据源,因为此时您无法控制它 - 用户会犯错误,忘记指示等

因此,无论您是否在excel中进行任何清理,您都需要检查Access中的数据。

现在您要导入数据,并防止重复记录?执行此操作的一种方法是创建指向excel文件的链接(即,Access将其视为表),根据您的要求清理数据,最后创建查询excel表的CREATE TABLE查询( SELECT DISTINCT ...),并将结果插入到新的Access表中。

答案 1 :(得分:0)

防止数据库中重复记录的最佳方法是在构成唯一键的列上定义唯一索引。

例如,如果您想确保医院系统中每个医院的每个专科不超过一名专科医生,您可以在假设的HospitalSpecialists表中执行此操作:

             id                autoincrementing integer primary key
             hospitalid        integer foreign key references hospitals(id)
             physicianid       integer foreign key references physicians(id)
             specialityid      integer foreign key references specialties(id)


             unique composite index on (hospitalid, physicianid, specialtyid)

然后你无法插入副本。

因此,您首先必须确定构成表的副本的内容:列的哪个子集一起构成记录的唯一性?

答案 2 :(得分:0)

我是Access程序员,而不是Excel程序员,因此我投票支持在Access中执行所有操作。正如@kuru kuru na ...建议的那样,如果用户可以编辑Excel文件,那么在你对它们进行擦洗之后就无法保证它们保持“干净”,所以我会说要做所有的清理工作。访问自己。

关于导入和避免重复,你需要记住@Tim的最后一段,即“你首先必须确定什么构成重复”。这可能比听起来更复杂(例如,你会将“Bob Smith”和“Robert Smith”匹配,还是只匹配完全匹配?)。

相关问题