超级noob在我的智慧结束与Access 2010.我有一些问题:
如何在Access中创建子表?我认为这只是在子表中定义PK然后将PK作为FK引用到父表的问题。这是我的sql代码,以防万一我没有意义:
这是我的父表的结尾,即Employee -
CONSTRAINT PKEmployee PRIMARY KEY (EmpNo) ,
CONSTRAINT FKPosNo FOREIGN KEY (PosNo) REFERENCES Position,
CONSTRAINT FKDeptNo FOREIGN KEY (DeptNo) REFERENCES Department )
这是我的子表所具有的,即薪水。这是一个员工类型 -
CREATE TABLE Salary
( EmpNo CHAR (6) ,
OfficeNo CHAR (4) ,
SalaryAmount DOUBLE ,
CONSTRAINT PKEmpNo PRIMARY KEY (EmpNo),
CONSTRAINT FKEmpNo FOREIGN KEY (EmpNo) REFERENCES Employee )
当我运行此代码时,会给我“数据库中已存在名为'FKEmpNo'的关系。”信息。我不确定这是在我的最后还是Access'。
当我尝试将'SalaryAmount'声明为DECIMAL时,我也遇到语法错误。我的代码是:
(EmpNo CHAR (6) ,
OfficeNo CHAR (4) ,
SalaryAmount DECIMAL (7, 2) ,
CONSTRAINT PKEmpNo PRIMARY KEY (EmpNo),
CONSTRAINT FKEmpNo FOREIGN KEY (EmpNo) REFERENCES Employee )
错误突出显示第一个括号。我甚至可以在2010年访问中使用DECIMAL类型吗?如果没有,在2010年代表年度收入的最佳方式是什么?
请提供示例并向我解释,就像我五岁。我正在尝试围绕这个数据库包装而不会丢失它。
答案 0 :(得分:1)
下面的代码示例构建并执行此语句:
CREATE TABLE Salary
(
uid COUNTER PRIMARY KEY,
EmpNo CHAR (6),
OfficeNo CHAR (4),
SalaryAmount DECIMAL (7, 2),
CONSTRAINT FKEmpNo FOREIGN KEY (EmpNo) REFERENCES Employee(EmpNo)
);
它使用SalaryAmount DECIMAL (7, 2)
成功创建了表,因为该语句是从CurrentProject.Connection.Execute
执行的,这是一种ADO方法。从ADO执行时,您只能在DECIMAL
中使用CREATE TABLE
。使用DAO执行时无效。查询设计器使用DAO执行查询。
如果Access抱怨与现有 FKEmpNo 约束的名称冲突,请为外键约束使用不同的名称 - 一个与任何其他现有约束不匹配的名称......
CONSTRAINT BobIsYourUncle FOREIGN KEY ...
注意我更改了Salary
的主键。我猜你不是真的想要EmpNo
作为主键和外键,所以我使用自动编号字段 uid 作为主键。如果我猜错了,你必须解决这个问题。
Dim strDdl As String
strDdl = "CREATE TABLE Salary" & vbCrLf & _
"(" & vbCrLf & _
"uid COUNTER PRIMARY KEY," & vbCrLf & _
"EmpNo CHAR (6)," & vbCrLf & _
"OfficeNo CHAR (4)," & vbCrLf & _
"SalaryAmount DECIMAL (7, 2)," & vbCrLf & _
"CONSTRAINT FKEmpNo FOREIGN KEY (EmpNo) REFERENCES Employee(EmpNo)" & vbCrLf & _
");"
Debug.Print strDdl
CurrentProject.Connection.Execute strDdl
最后,这个答案是为了向您展示如果您真的需要DECIMAL
CREATE TABLE
。但是,在我看来,CURRENCY
将是SalaryAmount
字段的自然选择。