2

超级菜鸟在我的智慧中以 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’的关系”。信息。我不确定这是我的目的还是访问'。

当我尝试将“SalaryAmount”声明为 DECIMAL 时,也会出现语法错误。我的代码是:

  (EmpNo                 CHAR (6) ,
  OfficeNo              CHAR (4) ,
  SalaryAmount      DECIMAL (7, 2) ,
  CONSTRAINT PKEmpNo PRIMARY KEY (EmpNo),
  CONSTRAINT FKEmpNo FOREIGN KEY (EmpNo) REFERENCES Employee )

该错误突出显示第一个括号。我什至可以在 access 2010 中使用 DECIMAL 类型吗?如果不是,在 Access 2010 中表示年收入的最佳方式是什么?

请提供示例并向我解释,就像我是一个五岁的孩子一样。我正在尝试围绕这个数据库的东西而不丢失它。

4

1 回答 1

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 方法。您只能DECIMALCREATE TABLE从 ADO 执行时使用。使用 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领域的自然选择。

于 2013-11-08T18:56:41.617 回答