繁体   English   中英

MS Access 中的 Create Table 语句语法错误,但在 phpmyadmin 中没有

[英]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

笔记:

  1. int字段类型具有固定长度。 如果您尝试执行int(<some number>) ,Access 会报错
  2. decimal字段类型可能是 Access 中的一个“陷阱”问题。 它在CREATE TABLE中是合法的,但仅当语句通过 OleDb 执行时。 它从CurrentProject.Connection.Execute开始工作,因为这是一个 ADO 方法,因此使用 OleDb。
  3. DEFAULT在 Access DDL 中也是合法的,但必须通过 OleDb 执行。 但是我不明白为什么它在这里有用。 当您添加一行而没有为该字段提供值时,它将是 Null,除非您指定其他一些默认值。
  4. Access 不接受您的原始PRIMARY KEY约束。 我按照以下模式重新编写了它: CONSTRAINT <constraint name> PRIMARY KEY (<field list>)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM