Кажется, здесь есть некоторая путаница. Если вы создаете запрос Access, то значение имеет значение ZERO ZERO функций даты и синтаксиса SQL-сервера. Ваш SQL ДОЛЖЕН продолжать записываться в соответствии со стандартами Access, если только вы не используете сквозной запрос.
Тем не менее, я видел это 100 раз здесь. Какой тип данных на стороне сервера sql? Это дата-время или дата-время2?
И двойная, тройная, четырехкратная (и многое другое) проверка связанной таблицы в режиме проектирования.
Если вы связываетесь с SQL-сервером с помощью стандартного устаревшего драйвера SQL Server. Тот, что отгружался 20 лет с Windows 98SE?
Вы ДОЛЖНЫ проверить, видит ли Access эти столбцы как текст или как столбцы даты (которые в Access всегда разрешают часть времени, если хотите).
Код доступа, запросы, формы и ВСЕ должны требовать НУЛЕВЫХ изменений, если вы переносите эти данные из Access на сервер SQL и связываете таблицу. Еще раз: НОЛЬ НОЛЬ изменений.
Однако, если вы использовали datetime2 на стороне SQL-сервера? Тогда вы НЕ МОЖЕТЕ использовать устаревший драйвер SQL-сервера при связывании таблицы. Причина в том, что они не поддерживают новый формат datetime2. В результате Access будет фактически видеть, использовать и обрабатывать этот столбец как текстовый столбец. Вы ДЕЙСТВИТЕЛЬНО, но ДЕЙСТВИТЕЛЬНО не хотите, чтобы это произошло. Почему? Потому что затем вы проводите следующую неделю, задавая вопросы по SO о том, как не работает какой-либо код даты, столбец или запрос. еще раз: ZERO ZERO изменений в Access не требуется. Если ваши даты начинают ломаться, то проблема не в форматах дат, а в том, что этот столбец теперь рассматривается доступом как тип данных TEXT.
Soltuion: Либо измените столбцы datetime2 на стороне sql на datetime и повторно свяжите.
или повторно свяжите свои таблицы, используя более новый собственный 11 (или более позднюю версию - до 18 сейчас). таким образом, доступ будет видеть/использовать/обрабатывать datetime2 как правильный формат даты в Access.
Итак, прежде чем что-то делать? Откройте одну из таблиц Access, связанных с SQL-сервером, в режиме конструктора. (игнорируйте приглашение только для чтения). Теперь посмотрите на тип данных, присвоенный столбцам даты. Если они текстовые, то у вас царский беспорядок.
Вам необходимо повторно связать, используя более новые драйверы ODBC.
Нулевой из вашего существующего кода, sql и quires должен быть затронут или даже изменен, если вы используете связанную таблицу с сервером sql. Но опять же, если вы связались с использованием неправильного драйвера SQL ODBC, тогда Access не сможет ни увидеть, ни обработать эти столбцы datetime2 как дату - он будет использовать текст, и вы действительно не хотите, чтобы это произошло.
В итоге: любой код даты, обновления SQL, сортировка, запрос, код VBA, код формы, отчеты должны продолжать работать с НУЛЕВЫМИ изменениями. Если вы вносите изменения в даты после миграции, значит, вы сделали все это неправильно, и эти столбцы дат не видны при доступе как столбцы дат.
Либо избавьтесь от всех столбцов datetime2, а затем повторно свяжите (измените их на стороне сервера на datetime). Или повторно свяжите таблицы с помощью собственного драйвера ODBC версии 11 или более поздней. Любой из этих вариантов решит эту проблему.
Это исправление требует НУЛЕВОГО кода и нулевых изменений в Access, связанных с датами.
person
Albert D. Kallal
schedule
26.09.2020
Now()
иDate()
. Первый эквивалентенgetdate()
в SQL, второй возвращает текущую дату без времени - именно то, что вам нужно. - person Arvo   schedule 22.09.2020