Это стоящий указания, что встроенное ключевое слово является на самом деле просто подсказкой к компилятору. Компилятор может проигнорировать встроенное и просто генерировать код для функции где-нибудь.
основной недостаток к подставляемым функциям состоит в том, что это может увеличивать размер Вашего исполняемого файла (в зависимости от количества инстанцирований). Это может быть проблемой на некоторых платформах (например, встроенные системы), особенно если сама функция является рекурсивной.
я также рекомендовал бы делать функции inline'd очень небольшими - преимущества скорости подставляемых функций имеют тенденцию уменьшаться, поскольку функция увеличивается в размере. В какой-то момент издержки вызова функции становятся маленькими по сравнению с выполнением тела функции, и преимущество потеряно.
В коде SQL ядра СУБД Access, когда вам нужно указать, что буквальное значение имеет тип DATETIME
, вы можете либо явно привести значение к DATETIME
или используйте символы #
, чтобы ограничить значение.
Использование явного преобразования с использованием функции CDATE ()
:
INSERT INTO bs1 (teacher, subject, [date], period)
VALUES ('test', 'test', CDATE('2009-12-31 00:00:00'), 0);
Использование литерала DATETIME
значение:
INSERT INTO bs1 (teacher, subject, [date], period)
VALUES ('test', 'test', #2009-12-31 00:00:00#), 0);
Когда INSERT
вводит значение в столбец типа DATETIME
, если вы не укажете явное значение DATETIME
, механизм неявно попытается для приведения значения к DATETIME
. Буквальное значение «test» не может быть приведено к типу DATETIME
, и это может быть источником синтаксической ошибки.
Примечание: ничего из вышеперечисленного не применимо к значению NULL
. В SQL ядра СУБД Access нет способа привести значение NULL
к явному типу, например
SELECT CDATE(NULL)
генерирует ошибку «Недопустимое использование NULL». Поэтому, чтобы указать литерал NULL
DATETIME
, просто используйте ключевое слово NULL
.
Следует помнить, что ядро СУБД Access имеет только один тип временных данных, а именно DATETIME
(его синонимы: DATE
, TIME
, DATETIME
и TIMESTAMP
). Даже если вы явно не укажете элемент времени, полученное значение все равно будет содержать элемент времени, хотя и неявный. Следовательно,
Я считаю дата
зарезервированным словом. Вам необходимо заключить зарезервированные имена полей в квадратные скобки:
INSERT INTO bs1 (учитель, предмет, [дата], период) VALUES ('test', 'test', 'test', 'test')
РЕДАКТИРОВАТЬ: См. Следующую статью для получения полного списка зарезервированных слов в Access 2002 и выше: http://support.microsoft.com/kb/286335
~ md5sum ~
В Access разделителем для литеральных значений, вставленных в поля даты, является #
, для текстовых полей - '
или "
, а значения числовых полей не имеют разделителя. , который предлагает:
INSERT INTO bs1 (teacher, subject, [date], period)
VALUES ('test', 'test', #2009-12-31#, 0)