使用 DDL 创建外键,Delphi

Using DDL to create a Foreign Key, with Delphi

我正在使用 Delphi 7 创建一个带有一些 DDL 语句的 Access 数据库。对于简单的股票发票系统,它将是一个相对简单的关系数据库。我已经设法创建一个名为 CUSTOMER 的 table 没问题,但是在尝试创建一个名为 ORDER 的 table 时,在 ORDER 中我有一个外键字段 CustomerID,我收到以下错误消息:

"Syntax error in field definition".

CustomerID 是 CUSTOMER table 中的 Key 字段,我只想 link 将两者放在一起。这是我对两者的 DDL 语句。

cs:= 'CREATE TABLE tblCUSTOMER ('+
      'CustomerID Number,' +
      'FName Text(20),' +
      'SName Text(20),' +
      'AddressLine1 Text(35))';
ADOCommand1.CommandText:=cs;
ADOCommand1.Execute;

cs:='CREATE INDEX idxCustomerID ON tblCUSTOMER (CustomerID) WITH PRIMARY';
ADOCommand1.CommandText:=cs;
ADOCommand1.Execute;

cs:= 'CREATE TABLE tblORDER ('+
'OrderID Number,'+
//Here is the line!!
'CustomerID Number CONSTRAINT CustomerID REFERENCES tblCUSTOMER (CustomerID),'+
'OrderDate DateTime,'+
'CREATE INDEX idxPrimary ON tblORDER (OrderID) WITH PRIMARY)';
ADOCommand1.CommandText:=cs;
ADOCommand1.Execute;

我猜问题出在上面的外键声明上。请问我做错了什么?

我也试过这个:

cs:= 'CREATE TABLE tblORDER ('+
'OrderID Number CONSTRAINT PK_OrderID PRIMARY KEY,'+
'CustomerID Number CONSTRAINT FK_CustomerID REFERENCES tblCUSTOMER (CustomerID),'+
'OrderDate DateTime,'+
'CREATE INDEX idxPrimary ON tblORDER (OrderID) WITH PRIMARY';

还是不行。

我找到了解决方案。 CONSTRAINT 子句应该如下所示:

cs:= 'CREATE TABLE tblORDER ('+
'OrderID Number,'+
'CustomerID Number CONSTRAINT FK_CustomerID References tblCUSTOMER (CustomerID),' +
'OrderDate DateTime)';
ADOCommand1.CommandText:=cs;
ADOCommand1.Execute;

并且 CREATE INDEX 子句应该是一个单独的 DDL 命令。

cs:='CREATE INDEX idxOrderID ON tblORDER (OrderID) WITH PRIMARY';
ADOCommand1.CommandText:=cs;
ADOCommand1.Execute;

谢谢大家