我一直收到CREATE TABLE语法错误,但我没有看到错误!导致错误的原因是什么?
我的SQL:
CREATE TABLE my_employee
(
employee_id INTEGER PRIMARY KEY NOT NULL,
first_name VARCHAR(25) NOT NULL,
last_name VARCHAR(30) NOT NULL,
address VARCHAR(10) NOT NULL,
birthdate DATE,
salary NUMERIC(8,2) DEFAULT 15000,
marital_status CHAR(1)
);
答案 0 :(得分:5)
由于您的DDL语句包含DEFAULT
,因此您必须使用ADO执行它。我将您的语句加载到字符串变量中并从Access 2007执行它,如下所示:
CurrentProject.Connection.Execute strSql
薪水字段为十进制,精度为8,比例为2,默认为15000.
DEFAULT
是Jet 4.0添加的Access SQL功能之一。这些功能不适用于从DAO执行的语句。如果您使用Access'查询设计器来创建和执行语句,那么您正在使用DAO。如果您使用CurrentDb.Execute
,则相同。但CurrentProject.Connection
是一个ADO对象,因此它可以.Execute
Jet 4.0功能。
NOT NULL
之后,PRIMARY KEY
PRIMARY KEY
隐含NOT NULL
,因此PRIMARY KEY NOT NULL
隐含{{1}}。但是{{1}}不会触发错误。只要您从ADO执行它,该语句就像您最初编写它一样。
答案 1 :(得分:1)
我和Access 2007女士有同样的问题,但我稍后解决了。
这是因为实际上由于安全原因,默认情况下会禁用某些功能
当它显示syntax error
时,您可以在菜单栏的某处或底部看到消息:Some Features Are Disabled For Security Reasons...
。
单击该消息,然后继续启用更多功能。
答案 2 :(得分:1)
正如HansUp所说:DDL中的“默认”在这里不起作用。作为替代方案,您可以创建没有默认值的表,然后通过TableDef添加默认值:
CurrentDb().Execute "create table my_employee ..."
CurrentDb().TableDefs("my_employee").Fields("salary").DefaultValue = 15000
答案 3 :(得分:0)
您的问题出在您的PRIMARY KEY声明中
CREATE TABLE my_employee
(
employee_id INTEGER NOT NULL,
first_name VARCHAR(25) NOT NULL,
last_name VARCHAR(30) NOT NULL,
address VARCHAR(10) NOT NULL,
birthdate DATE,
salary NUMERIC(8,2) DEFAULT 15000,
marital_status CHAR(1),
PRIMARY KEY (employee_id)
);