Эквиваленты типов данных: таблицы MS Access Qu «CREATE TABLE», запросы ↔ ODBC SQL - PullRequest
0 голосов
/ 01 мая 2018

Какой правильный синтаксис при создании таблицы в Access с 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!
);

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

ТИПЫ ДАННЫХ ДОСТУПА MICROSOFT

В следующей таблице приведены типы данных 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 , если более одного типа Microsoft Access сопоставлены с одним и тем же типом данных ODBC SQL. Все преобразования в Приложение D Справочника по программированию ODBC поддерживаются для типов данных SQL, перечисленных в предыдущей таблице.


Ограничения на типы данных Microsoft Access

  • BINARY**, **VARBINARY** и **VARCHAR: создание столбца BINARY, VARBINARY или VARCHAR нулевой или неопределенной длины фактически возвращает 510 -байтный столбец.
  • BYTE: Даже если поле Microsoft Access NUMBER с FieldSize, равным BYTE, не подписано, при использовании драйвера Microsoft Access в поле можно вставить отрицательное число ,
  • CHAR**, **LONGVARCHAR** и **VARCHAR: строковый литерал может содержать любой символ ANSI (1-255 десятичных). Используйте две последовательные одинарные кавычки ('') для представления одной одинарной кавычки ('). Процедуры должны использоваться для передачи символьных данных при использовании любого специального символа в столбце символьного типа данных.
  • DATE: Значения даты должны быть разделены в соответствии с каноническим форматом даты ODBC или разделены ограничителем даты и времени (#). В противном случае Microsoft Access будет рассматривать значение как арифметическое выражение и не будет выдавать предупреждение или ошибку.
    • Например, дата "March 5, 1996" должна быть представлена ​​как {d '1996-03-05'} или #03/05/1996#; в противном случае, если отправлено только 03/05/1993, Microsoft Access оценит это как 3 ÷ 5 ÷ 1996. Это значение округляется до целого числа 0, и поскольку нулевой день отображается на 1899-12-31, это используемая дата.
    • Символ канала (|) нельзя использовать в значении даты, даже если он заключен в кавычки.
  • GUID: тип данных ограничен Microsoft Access 4.0.
  • NUMERIC: тип данных ограничен Microsoft Access 4.0.

(дополнительная информация на Источник )


Ограничения для типов данных ODBC Desktop Driver

Драйверы базы данных Microsoft ODBC для настольных ПК накладывают следующие ограничения на типы данных:

  • Все типы данных Сбой преобразования типов может привести к тому, что для соответствующего столбца будет установлено значение NULL.
  • BINARY Создание столбца BINARY нулевой длины фактически возвращает 255-байтовый столбец BINARY.
  • DATE Тип данных DATE нельзя преобразовать в другой тип данных (или сам по себе) с помощью функции CONVERT.
  • DECIMAL (точное число) ** Не поддерживается.
  • Floating-Point Data Types Количество десятичных знаков в числе с плавающей запятой может быть ограничено форматом числа, установленным в International разделе Панель управления Windows .
  • NUMERIC Поддерживает максимальную точность и шкалу 28.
  • TIMESTAMP Тип данных TIMESTAMP не может быть преобразован в саму себя с помощью функции CONVERT.
  • TINYINT: значения TINYINT всегда без знака.
  • Zero-Length Strings: при использовании dBASE, Microsoft Excel, Paradox или Textdriver при вставке строки нулевой длины в столбец вместо нее фактически вставляется NULL.

( Источник )


Дополнительная информация:


Небольшое дополнение Эрик :

На самом деле вы можете использовать тип данных Decimal в запросах CREATE TABLE. Однако для этого необходимо, чтобы ваш оператор выполнялся либо с помощью ADO, либо в базе данных, для которой был установлен синтаксис, совместимый с ANSI-92.

Чтобы установить для вашей базы данных синтаксис, совместимый с ANSI-92:

Перейдите в Файл -> Параметры. Откройте вкладку Дизайнеры объектов . Перейдите к Query Designer и в разделе Совместимый синтаксис SQL Server (ANSI 92) установите флажок Эта база данных . Теперь вы можете просто выполнить запрос. Обратите внимание, что это влияет на все запросы в базе данных и влияет на запросы различными способами.

Чтобы выполнить запрос с помощью ADO:

В VBA Immediate Window выполните следующую строку:

CurrentProject.Connection.Execute "CREATE TABLE NONGAME (ITEM_NUM CHAR(4) NOT NULL PRIMARY KEY,  PRICE DECIMAL(6,2));"

Конечно, вы можете выполнять более сложные запросы, используя ADO.

0 голосов
/ 01 мая 2018

DECIMAL и DOUBLE нельзя использовать в Access. За «цену» ВАЛЮТА - лучшая ставка. Для моего другого целого числа я просто использовал NUMBER и не дал ему никаких ограничений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...