使用 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;
谢谢大家
我正在使用 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;
谢谢大家