Сравнение дат из связанной таблицы SQL Server в Access
У меня есть связанная таблица SQL Server в Access, и я пытаюсь запросить, чтобы извлечь из определенной даты или диапазонов данных (т.е. < 01/31/2017
, например). Я пробовал в критериях в режиме дизайна Access, следующее: < #01/31/2017#
но это не правильно сравнивает.
Поле в таблице сервера SQL является типом данных datetime, я отформатировал его в Access как Short Date в свойствах в режиме конструктора.
SELECT dbo_LicensesLiveViewWithRevenue.BAN,
dbo_LicensesLiveViewWithRevenue.PTN,
dbo_LicensesLiveViewWithRevenue.SOC,
dbo_LicensesLiveViewWithRevenue.LicenseCreatedOn,
Format([DeactivationDate],"Short Date") AS DeactOn,
dbo_LicensesLiveViewWithRevenue.RetailPrice,
dbo_LicensesLiveViewWithRevenue.WholeSalePrice,
dbo_LicensesLiveViewWithRevenue.AccountID
FROM dbo_LicensesLiveViewWithRevenue
WHERE (((dbo_LicensesLiveViewWithRevenue.LicenseCreatedOn)< #2017/01/31#)) ORDER BY dbo_LicensesLiveViewWithRevenue.LicenseCreatedOn;
Я также попытался запрос с передачей даты в виде параметров из формы, но не повезло.
SELECT dbo_LicensesLiveViewWithRevenue.BAN,
dbo_LicensesLiveViewWithRevenue.PTN,
dbo_LicensesLiveViewWithRevenue.SOC,
dbo_LicensesLiveViewWithRevenue.LicenseCreatedOn,
Format([DeactivationDate],"Short Date") AS DeactOn,
dbo_LicensesLiveViewWithRevenue.RetailPrice,
dbo_LicensesLiveViewWithRevenue.WholeSalePrice,
dbo_LicensesLiveViewWithRevenue.AccountID
FROM dbo_LicensesLiveViewWithRevenue
WHERE (((dbo_LicensesLiveViewWithRevenue.LicenseCreatedOn)<[Forms]![MainForm]![EndDate]));
Результаты, достижения:
Когда я запускаю запрос непосредственно на SQL-сервере, он дает мне правильные записи с правильными датами (в SQL даты <20170131). В Access у меня такое же количество записей, но даты отображаются неверно, как на рисунках с результатами.
1 ответ
Я бы предложил открыть связанную таблицу в режиме конструктора. Не обращайте внимания на сообщение msg о том, что это действие доступно только для чтения).
Если рассматриваемые столбцы имеют более новые форматы даты и времени (datetime2), и вы связываетесь с помощью стандартного драйвера SQL, то такая дата рассматривается как столбцы TEXT, а НЕ как дата / время.
При быстром взгляде на связанную таблицу в режиме конструктора будут видны столбцы даты при доступе в виде столбцов даты или текста.
Если вы используете какой-либо более новый формат дат с сервера SQL, вы ДОЛЖНЫ использовать более новые собственные драйверы версии 11 (или более поздние) при связывании таблиц с сервером SQL. Именно по этой причине я склонен придерживаться устаревшего "стандартного" устаревшего драйвера SQL. Устаревшие драйверы устанавливаются и включаются в Windows - и, следовательно, не требуется установка драйверов при запуске Access на каждой рабочей станции.
Однако, если вы используете более новые форматы дат в SQL-сервере, вам необходимо связать таблицы, используя собственные драйверы 11, и вы также должны распространять и устанавливать собственные драйверы 11 на каждую рабочую станцию в дополнение к Access (или среде выполнения Access).). Поэтому, хотя следует отдавать предпочтение и использовать более новые драйверы SQL, недостатком является то, что эти драйверы должны быть установлены на каждой рабочей станции.
Поэтому дважды проверьте тип данных для тех столбцов, которые Access отображает в режиме конструирования таблицы - если они текстовые, то вам нужно повторно связать с родными 11 драйверами.