我需要從現有的 mySQL 資料庫創建一個 Access 資料庫。我能夠使用 ODBC 連接匯入一些表,但其中一些表出錯(說“不能多次定義欄位”)。我無法弄清楚為什么會出現該錯誤(在任何失敗的表中都沒有具有重復名稱的欄位,也沒有任何具有特殊字符的欄位),因此我決定只從 Toad 為這些表生成 SQL。
我從 Toad 獲得的第一個表的 SQL 如下,它在 phpmyadmin 或 toad 中沒有錯誤。為什么 Access 告訴我有語法錯誤?Access 也沒有突出顯示或下劃線任何內容來指示語法錯誤可能在哪里。
我嘗試用單引號和雙引號替換 `quote
我還嘗試洗掉 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;
uj5u.com熱心網友回復:
Access 和 MySQL SQL 方言不匹配。此外,Access DDL 附帶的細節對許多人來說是不受歡迎的驚喜(特別參見下面的注 2)。因此,將 MySQLCREATE TABLE陳述句轉換為 Access SQL 可能具有挑戰性。
將 MySQL 表匯入 Access 會更容易。但是,由于您在嘗試匯入時遇到錯誤,我會嘗試鏈接表,然后運行“生成表”查詢以將資料拉入新的 Access 表中:
SELECT * INTO NewAccessTableName FROM LinkedTableName
擁有 Access 表后,您可以根據需要在表的Design View中添加主鍵并修改欄位屬性。
但是,如果您必須或想要使用 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>)decimal欄位型別可能是 Access 中的“陷阱”問題。它在 a 中是合法的CREATE TABLE,但僅當該陳述句通過 OleDb 執行時。它的作業原理是CurrentProject.Connection.Execute因為這是一種 ADO 方法,因此使用 OleDb。DEFAULT在 Access DDL 中也是合法的,但必須通過 OleDb 執行。但是我不明白為什么它在這里有用。當您添加一行而不為該欄位提供值時,除非您指定其他默認值,否則它將為 Null。- Access 不接受您原來的
PRIMARY KEY約束。我按照模式重寫了它:CONSTRAINT <constraint name> PRIMARY KEY (<field list>)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/460165.html
上一篇:將Excel電子表格匯入Access:MSAccess無法將所有資料追加到表中
下一篇:SQL-一起計算兩列
