2015-02-17 3 views
0

У нас есть приложение Access, которое использует связанные таблицы SQL Server 2000 ODBC DSNless. Мы повышаем до SQL Server 2014, и я меняюсь с помощью строки соединенияПреобразование приложения Access со связанными таблицами в SQL Server 2014

ODBC;DRIVER=SQL Server;..." to ODBC;DRIVER=SQL Server Native Client 11.0;... 

Приложение работает после преобразования, за исключением, когда я пытаюсь выполнить запрос с этим, где положение он терпит неудачу на этом WHERE пункте:

WHERE [Expiration Date] < #8/17/2015# 

сообщение об ошибке

ODBC Сбой вызова: Конверсия удалось при преобразовании даты в/или время из строки символов. (# 241)

Обновление: запросы с предложениями, которые раньше выполнялись, - это запросы доступа, основанные на запросе, который запрашивает базу данных SQL Server.

+0

смысл вашей даты литералов зависит от языка. Это «DD/MM/YYYY» или «MM/DD/YYYY»? поэтому рекомендуется использовать литеральные форматы, которые не зависят от языка. В вашем случае вы можете настроить SQL Server 2000 как английский английский и новый SQL Server 2014, настроенный как британский английский. Если SQL Server ожидает «DD/MM/YYYY», тогда он не сможет преобразовать '8/17/2015'. –

ответ

0

SQL Server не использует формат даты MS Access, особенно с использованием #. Date functions in SQL Server отформатированы как таковой:

  • DATE - формат YYYY-MM-DD
  • DATETIME - формат: YYYY-MM-DD HH: MI: SS
  • SMALLDATETIME - формат: YYYY-MM-DD HH : MI: SS
  • TIMESTAMP - формат: уникальный номер

Кроме того, JET MS Access в/ACE SQL Engine является другим SQL диалект, чем SQL Server, так каждый оператор запроса не может быть несовместим. Это верно, если вы переносите SQL Server в Oracle, MySQL, PostgreSQL, db2 и другие.

+0

Я понимаю, что # для форматирования. Доступ к датам. То, что я пытаюсь понять, это то, почему он работал с драйвером SQL 2000, но не работает с SQL 2014. Я хочу избежать необходимости менять много запросов и кода. – Paul

+0

Могут быть много причин, по которым между 14 годами выпусков программного обеспечения в дополнение к MS Access и обновлению Windows: DLL, ключи реестра, драйверы, 32-разрядные/64-разрядные проблемы и многое другое. Однако здесь есть ссылка [SO post] (http://stackoverflow.com/questions/3702089/ms-access-front-end-does-not-recognise-dates-from-sql-server). Возможно, может измениться ваш тип даты в SQL Server. Кроме того, проверьте эту информацию [часть] (http://www.codeproject.com/Articles/566542/Date-and-Time-Data-Types-and-Functions-SQL-Server#12) о изменениях типа даты/времени в версиях MSSQL. – Parfait

0

Если формат столбца в SQL Server является DateTime и не Datetime2 попробуйте ниже

WHERE Format([Expiration Date],"dd-mmm-yyyy") < Format(#8/17/2015#,"dd-mmm-yyyy") 

Или

Datediff("d",Format([Expiration Date],"dd-mmm-yyyy"), Format(#8/17/2015#,"dd-mmm-yyyy")) < 0 
Смежные вопросы