Значение по умолчанию Microsoft Access DateTime Теперь через SQL

У меня было это сегодня на рабочем листе. Ни F9, ни включение Итеративного Вычисления не обновили соответствующие ячейки, но дважды щелкнули по ячейке и нажали Enter. Я искал справку Excel и нашел ее в статье справки под названием Изменение формулы пересчета, итерации или точности:

Ctrl Alt F9 :
Пересчитать все формулы во всех открытых книгах, независимо от того, изменились ли они с момента последнего пересчета.
Ctrl Shift Alt F9 :
Проверить зависимые формулы, а затем пересчитать все формулы во всех открытых книгах, независимо от того, изменились ли они с момента последнего пересчета.

Поэтому я попытался Ctrl Shift Alt F9 и, конечно же, все мои не пересчитываемые формулы наконец пересчитаны!

7
задан BIBD 29 September 2009 в 14:29
поделиться

4 ответа

Я предполагаю:

  • ваша целевая база данных - это ACE или Jet Engine, а не SQL Server;
  • вам нужны дата и время, т.е. известен как CURRENT_TIMESTAMP в стандартном SQL (однако не поддерживается напрямую ACE / Jet), и его не следует путать с типом данных SQL Server TIMESTAMP ;
  • вы хотите получить ответ, используя SQL DDL.

Если вы создали свою таблицу с помощью этого SQL DDL:

CREATE TABLE tblLogs 
(
   date_created DATETIME NOT NULL
);

, то следующий SQL DDL добавит DEFAULT , которое вам требуется:

ALTER TABLE tblLogs ALTER 
   date_created DATETIME DEFAULT NOW() NOT NULL;

Вышеупомянутый синтаксис ACE / Jet SQL является ANSI- 92 вкус режима запроса. Чтобы использовать это через интерфейс MS Access (например, представление SQL объекта запроса), см. Microsoft Office Access: о режиме запроса ANSI SQL (MDB) . Чтобы сделать это программно с использованием SQL DDL, требуется (AFAIK) использование OLE DB, который в VBA требует (AFAIK) использования ADO. DAO всегда использует синтаксис режима запроса ANSI-89, синтаксис которого SQL DDL не поддерживает DEFAULT .

Если вы используете Access (а не автономный ACE / Jet), вы можете использовать одну строку VBA (ADO) код:

CurrentProject.Connection.Execute "ALTER TABLE tblLogs ALTER date_created DATETIME DEFAULT NOW() NOT NULL;"
7
ответ дан 7 December 2019 в 05:27
поделиться

Вместо now () вы можете использовать getdate (). Не могу проверить другую часть синтаксиса (здесь нет sql, и я редко меняю таблицы :)), но должно быть примерно так же.

edit: Кажется, что SQL не позволяет так легко менять значения по умолчанию. Посмотрите на эту страницу , где представлен практический пример - вам нужно изменить ограничения, потому что MSSQL рассматривает значения по умолчанию как ограничения. Извините за дезинформацию.

2
ответ дан 7 December 2019 в 05:27
поделиться

В SQL Server это будет:

ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT getDate ()

0
ответ дан 7 December 2019 в 05:27
поделиться

Я предлагаю, чтобы для создания или реструктуризации таблиц Jet вы использовали DAO вместо DDL. Он предлагает возможность управлять свойствами, которые отсутствуют в реализации DDL в Jet. Справка Access должна предоставить вам все, что вам нужно.

-1
ответ дан 7 December 2019 в 05:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: