[英]Syntax Error in Create Table Statement in MS Access but not in phpmyadmin
我需要从现有的 mySQL 数据库创建一个 Access 数据库。 我能够使用 ODBC 连接导入一些表,但是一些表出错了(说“不能多次定义字段”)。 我无法弄清楚为什么会出现该错误(在任何失败的表中都没有重复名称的字段,也没有任何具有特殊字符的字段),所以我决定只从 Toad 为这些表生成 SQL。
我从 Toad 获得的第一个表的 SQL 如下,它在 phpmyadmin 或 toad 中没有给出错误。 为什么 Access 告诉我存在语法错误? Access 也没有突出显示或下划线任何内容来指示可能存在语法错误的位置。
我尝试用单引号替换 ` 引号 ' 和双引号 "
我还尝试删除 ENGINE=InnoDB DEFAULT CHARSET=utf8 部分。
知道是什么导致了 Access 中的问题吗? 或者用另一种方法将这些失败的表导入到 Access 中?
谢谢!
CREATE TABLE tblHemisphericalPhoto (
PlotID varchar(10) NOT NULL,
SubplotID int(11) NOT NULL,
[year] int(11) NOT NULL,
fldStorageLocation varchar(100) NOT NULL,
fldFilename varchar(100) NOT NULL,
fldPhotoLocation varchar(45) NOT NULL,
fldLensHeight decimal(6,2) DEFAULT NULL,
PRIMARY KEY (fldStorageLocation,fldFilename,[year],PlotID,SubplotID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Access 和 MySQL SQL 方言不太匹配。 此外,Access DDL 附带的细节对许多人来说是不受欢迎的惊喜(特别参见下面的注释 2)。 因此,将 MySQL CREATE TABLE
语句转换为 Access SQL 可能具有挑战性。
将 MySQL 表导入 Access 会更容易。 但是,由于您在尝试导入时遇到错误,我会尝试链接表,然后运行“生成表”查询以将数据拉入新的 Access 表:
SELECT * INTO NewAccessTableName FROM LinkedTableName
拥有 Access 表后,您可以根据需要在表的设计视图中添加主键和修改字段属性。
但是,如果您必须或想要使用 Access DDL,这里有一个在 Access 中成功测试的版本:
strCreate = "CREATE TABLE tblHemisphericalPhoto (PlotID varchar(10) NOT NULL, " & _
"SubplotID int NOT NULL, [year] int NOT NULL, fldStorageLocation varchar(100) " & _
"NOT NULL, fldFilename varchar(100) NOT NULL, fldPhotoLocation varchar(45) " & _
"NOT NULL, fldLensHeight decimal(6,2) DEFAULT Null, " & _
"CONSTRAINT pkey PRIMARY KEY (fldStorageLocation,fldFilename,[year],PlotID,SubplotID))"
CurrentProject.Connection.Execute strCreate
笔记:
int
字段类型具有固定长度。 如果您尝试执行int(<some number>)
,Access 会报错decimal
字段类型可能是 Access 中的一个“陷阱”问题。 它在CREATE TABLE
中是合法的,但仅当语句通过 OleDb 执行时。 它从CurrentProject.Connection.Execute
开始工作,因为这是一个 ADO 方法,因此使用 OleDb。DEFAULT
在 Access DDL 中也是合法的,但必须通过 OleDb 执行。 但是我不明白为什么它在这里有用。 当您添加一行而没有为该字段提供值时,它将是 Null,除非您指定其他一些默认值。PRIMARY KEY
约束。 我按照以下模式重新编写了它: CONSTRAINT <constraint name> PRIMARY KEY (<field list>)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.