Ms Access,使用Excel修改表;处理 ID 自动编号
Ms Access, using Excel to modify tables; dealing with ID autonumber
TLDR:我在问题的最后总结了这个长问题。
我的公司正在使用正确设置了关系、PK 和 FK 的 Ms Access 数据库。我有时不得不对 tables 进行重大修改(添加字段,进行列操作,你知道,我认为只有 Excel 可以做的事情:字符串操作(LEFT,RIGHT 等),INDEX/MATCH (VLOOKUPS),自动填充字段等...
然后我要做的是将 table 导出到 Excel 以应用,进行修改。
当我完成并且我想导入回 tables 时,我的问题出现了。我在 Access 中遇到 ID 和自动编号功能的问题。当我导入 table 时,我无法使用以前的 ID 列,必须创建一个新的 ID 列才能获得有效的自动编号 ID 列。问题是,如果记录的顺序或记录的数量发生任何变化(即,如果某些记录被删除),那么新的自动生成的 ID 将与旧的不同,从而产生问题与我的关系。 FK 将不再指向正确的 PK。
我试图搜索解决这个问题的方法,但没有找到任何东西,好像没有其他人有这个问题。我想我可能做得不对。
简短版本:PK/FK 导出-导入 tables Access-Excel 时出现问题。在导入过程中,我无法将我的初始 PK 列重新用作自动编号,因此我创建了一个新的 ID 自动编号列,导致某些 ID 会更改的问题,从而导致 FK(关系)出现问题。
PK/FK 同步期间的问题通常通过将所有必需的数据从 Excel 导入临时 table 而不是自动编号 ID 列然后执行 3 个查询来解决:
- 更新 ID 相同的记录
- 如果源
中不存在目标 ID,则删除目标中的行table
- 如果源 ID 在目标中不存在,则将行插入目标 table
如果您确定导入的 ID 数据是唯一的,您甚至可以使用 INSERT
SQL 在自动编号字段中插入 ID,但这不是好的解决方案。最好为 Excel ID 使用单独的键列。
关于多列的问题,您可以考虑对属性值列使用一个 table。在这种情况下,你有多少属性并不重要。
Excel 用于收集用户信息和进行原始数据分析很有用,但主要计算最好在 Access 中进行,它具有非常强大的工具。使用查询、表单和 VBA 几乎可以实现所有内容,可以在 Excel 中完成,还有更多
假设您添加新字段是一次性(或不频繁)操作,那么首先在现有的table中手动创建这些字段。将所有新数据(用户名、角色、其他属性)导入临时 table。然后使用更新查询将相关数据放入原始 table 中的新列中,根据您在 Excel 中所做的任何匹配加入两个 table。如果您对此更满意table,则可以在导入之前在 Excel 中的新数据中执行所有字符串操作,但是您的临时新数据 table 必须有一个或两个列可以与您现有 table 中的某些内容完全匹配,以便能够执行更新。
TLDR:我在问题的最后总结了这个长问题。
我的公司正在使用正确设置了关系、PK 和 FK 的 Ms Access 数据库。我有时不得不对 tables 进行重大修改(添加字段,进行列操作,你知道,我认为只有 Excel 可以做的事情:字符串操作(LEFT,RIGHT 等),INDEX/MATCH (VLOOKUPS),自动填充字段等...
然后我要做的是将 table 导出到 Excel 以应用,进行修改。 当我完成并且我想导入回 tables 时,我的问题出现了。我在 Access 中遇到 ID 和自动编号功能的问题。当我导入 table 时,我无法使用以前的 ID 列,必须创建一个新的 ID 列才能获得有效的自动编号 ID 列。问题是,如果记录的顺序或记录的数量发生任何变化(即,如果某些记录被删除),那么新的自动生成的 ID 将与旧的不同,从而产生问题与我的关系。 FK 将不再指向正确的 PK。
我试图搜索解决这个问题的方法,但没有找到任何东西,好像没有其他人有这个问题。我想我可能做得不对。
简短版本:PK/FK 导出-导入 tables Access-Excel 时出现问题。在导入过程中,我无法将我的初始 PK 列重新用作自动编号,因此我创建了一个新的 ID 自动编号列,导致某些 ID 会更改的问题,从而导致 FK(关系)出现问题。
PK/FK 同步期间的问题通常通过将所有必需的数据从 Excel 导入临时 table 而不是自动编号 ID 列然后执行 3 个查询来解决:
- 更新 ID 相同的记录
- 如果源 中不存在目标 ID,则删除目标中的行table
- 如果源 ID 在目标中不存在,则将行插入目标 table
如果您确定导入的 ID 数据是唯一的,您甚至可以使用 INSERT
SQL 在自动编号字段中插入 ID,但这不是好的解决方案。最好为 Excel ID 使用单独的键列。
关于多列的问题,您可以考虑对属性值列使用一个 table。在这种情况下,你有多少属性并不重要。
Excel 用于收集用户信息和进行原始数据分析很有用,但主要计算最好在 Access 中进行,它具有非常强大的工具。使用查询、表单和 VBA 几乎可以实现所有内容,可以在 Excel 中完成,还有更多
假设您添加新字段是一次性(或不频繁)操作,那么首先在现有的table中手动创建这些字段。将所有新数据(用户名、角色、其他属性)导入临时 table。然后使用更新查询将相关数据放入原始 table 中的新列中,根据您在 Excel 中所做的任何匹配加入两个 table。如果您对此更满意table,则可以在导入之前在 Excel 中的新数据中执行所有字符串操作,但是您的临时新数据 table 必须有一个或两个列可以与您现有 table 中的某些内容完全匹配,以便能够执行更新。