我有一些MS ACCESS 2010数据库是我为一些同事制作的。数据库的目的是以更自动的方式收集有关某些员工的手动信息(而不是通过电子邮件发送文件或不得不依赖错误的Excel共享功能)。
我设法确保每个用户只使用查询查看自己的数据作为与用户交互的方式,并检查windows api以获取用户名。
现在我遇到了一个我不知道如何解决的具体问题:
表包含3个用户必须手动输入的列:
ID
Name
Location
ID不是此表的ID,它是来自完全不同的系统的ID,我无法与之交互,因此必须手动输入ID,因为我以后需要它。 ID对每位员工都是唯一的。
现在我确保用户不能使用约束两次输入这三列的唯一组合(相同的名称/ ID可用于不同的位置),但可能的是用户输入具有不同名称的相同ID(不好的),或者具有不同ID的同名(可能是员工名称相同)。
如果给定的ID存在的名称与用户输入的名称不同,是否可以检查输入数据?
示例:
ID NAME LOCATION
123 Martin Warszawa - OK
123 Martin Kraków - OK (the same person assigned to his second location)
124 Martin Kraków - OK (same name as another guy from Kraków, but two different persons)
123 Paul Wrocław - NOT OK (ID points to Martin, so it should not be entered as Paul)
123 Martin Warszawa - NOT OK (duplicated first row - blocked with constrains)
这甚至可以实现吗?
我想要保留的是用户在查询窗口中输入值的能力,据我所知,如果我将其更改为One:Many table relationship,那么这将被破坏。
我假设可以使用宏/ sql过程来完成它并阻止插入尝试但我不知道如何实现它
答案 0 :(得分:2)
规范化您的数据库。您有用ID标识的用户(主键粗体):
及其位置:
因此不能再有重复的用户条目,也不会有重复的位置。如果要添加内容,请使用INSERT。如果失败,则表示该条目已经存在。如果要更新某些内容,请使用UPDATE。如果要插入或更新依赖,请先尝试INSERT;如果失败更新。 (您可以搜索 upsert 和MS-Access,您将了解如何完成此操作。)