Сравнение дат из связанной таблицы 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 драйверами.

Другие вопросы по тегам