在Access with SQL中创建表时,正确的语法是什么?我尝试过DECIMAL,DOUBLE,NUMBER,INT ......没有什么可以让我创建一个带有限制器的整数类别。
示例:
CREATE TABLE NONGAME (
ITEM_NUM CHAR(4) NOT NULL PRIMARY KEY,
DESCRIPTION CHAR(30),
ON_HAND NUMBER(4), <------- DOES NOT WORK!
CATEGORY CHAR(3),
PRICE DECIMAL(6,2), <------- DOES NOT WORK!
ANYTHING DOUBLE(4,2) <------- DOES NOT WORK!
);
答案 0 :(得分:3)
下表显示了 Microsoft Access 数据类型,用于创建表的数据类型以及 ODBC SQL 数据类型。某些类型有限制,在表格后面列出。
Microsoft Access data type Data type (CREATE TABLE) ODBC SQL data type
~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
BIGBINARY[1] LONGBINARY SQL_LONGVARBINARY
BINARY BINARY SQL_BINARY
BIT BIT SQL_BIT
COUNTER COUNTER SQL_INTEGER
CURRENCY CURRENCY SQL_NUMERIC
DATE/TIME DATETIME SQL_TIMESTAMP
GUID GUID SQL_GUID
LONG BINARY LONGBINARY SQL_LONGVARBINARY
LONG TEXT LONGTEXT SQL_LONGVARCHAR[2]
MEMO LONGTEXT SQL_LONGVARCHAR[2]
NUMBER (FieldSize= SINGLE) SINGLE SQL_REAL
NUMBER (FieldSize= DOUBLE) DOUBLE SQL_DOUBLE
NUMBER (FieldSize= BYTE) UNSIGNED BYTE SQL_TINYINT
NUMBER (FieldSize= INTEGER) SHORT SQL_SMALLINT
NUMBER (FieldSize= LONG INTEGER) LONG SQL_INTEGER
NUMERIC NUMERIC SQL_NUMERIC
OLE LONGBINARY SQL_LONGVARBINARY
TEXT VARCHAR SQL_VARCHAR[1]
ARBINARY VARBINARY SQL_VARBINARY
[1] Access 4.0 applications only. Max 4000 B. Behaviour similar to LONGBINARY.
[2] ANSI applications only.
[3] Unicode and Access 4.0 applications only.
注意:
SQLGetTypeInfo
会返回ODBC
个数据类型。如果多个 Microsoft Access 类型映射到相同的ODBC
SQL
数据类型,则不会返回所有 Microsoft Access 数据类型。 Appendix D of the ODBC Programmer's Reference中的所有转化都支持上表中列出的SQL
数据类型。
BINARY**
,** VARBINARY**
和** VARCHAR
:创建BINARY
,VARBINARY
或{{ 1}}零或未指定长度的列实际上返回一个510字节的列。VARCHAR
:即使BYTE
等于NUMBER
的Microsoft Access FieldSize
字段未签名,也可插入负数使用Microsoft Access驱动程序时进入该字段。 BYTE
,** CHAR**
和** LONGVARCHAR**
:字符串文字可以包含任何ANSI字符(十进制1-255)。使用两个连续的单引号(VARCHAR
)来表示一个单引号(''
)。在字符数据类型列中使用任何特殊字符时,应使用过程来传递字符数据。 '
:日期值必须根据ODBC规范日期格式分隔,或者由日期时间分隔符(DATE
分隔)。否则,Microsoft Access将该值视为算术表达式,不会引发警告或错误。
#
&#34;必须表示为March 5, 1996
或{d '1996-03-05'}
;否则,如果仅提交#03/05/1996#
,Microsoft Access将评估为03/05/1993
。此值向上舍入为整数3 ÷ 5 ÷ 1996
,并且由于零日映射到0
,因此这是使用的日期。 1899-12-31
)不能用在日期值中,即使用后面的引号括起来也是如此。 |
:数据类型仅限于Microsoft Access 4.0。 GUID
:数据类型仅限于Microsoft Access 4.0。 (更多信息见Source)
Microsoft ODBC桌面数据库驱动程序对数据类型施加以下限制:
NUMERIC
。NULL
创建零长度BINARY
列实际上会返回一个255字节的BINARY
列。BINARY
DATE
数据类型无法通过DATE
函数转换为其他数据类型(或自身)。CONVERT
(确切数字)**不支持。DECIMAL
浮点数中的小数位数可能会受到国际 Windows控制面板的部分。Floating-Point Data Types
支持最高精度和28分。NUMERIC
CONVERT函数无法将TIMESTAMP
数据类型转换为自身。TIMESTAMP
:TINYINT值始终是无符号的。TINYINT
:使用dBASE,Microsoft Excel,Paradox或Textdriver时,在列中插入零长度字符串实际上会插入{ {1}}而不是。(Source)功能
CREATE TABLE
Statement (Microsoft Access SQL) Erik的小附录:
您实际上可以在Zero-Length Strings
次查询中使用NULL
数据类型。但是,这需要使用ADO或在已设置为使用ANSI-92兼容语法的数据库上执行语句。
将数据库设置为ANSI-92兼容语法:
转到文件 - &gt;选项。打开选项卡对象设计器。转到查询设计器,在SQL Server兼容语法(ANSI 92)下,选中此数据库。现在您可以执行查询。请注意,这会影响数据库中的所有查询,并以各种方式影响查询。
使用ADO执行查询:
在VBA立即窗口中,执行以下行:
Decimal
当然,您可以使用ADO执行更复杂的查询。
答案 1 :(得分:-2)
DECIMAL和DOUBLE不能在Access中使用。对于&#34;价格&#34;,CURRENCY是最好的选择。对于我的其他整数,我只使用了NUMBER并且没有给它限制。