MS-Access видит поля datetime2 сервера SQL как TEXT
Я изменяю размеры своего приложения с MS-Access FE и BE до MS-Access FE и SQL Server BE. Я использовал инструмент "увеличения размера" SSMA Access для преобразования всех таблиц из Access в SQL, а затем связал таблицы SQL в FE Access с использованием ODBC.
В моей базе данных доступа некоторые таблицы имели столбцы DateTime, которые были преобразованы в столбец datetime(0) в SQL Server. После того, как я связал таблицы тезисов в Access, Access увидит эти столбцы как текстовые, даже если они являются столбцами datetime2(0) в BE SQL-сервера.
Это вызывает некоторые проблемы, потому что запросы, которые работали с форматом даты, не работают с текстовым форматом. Есть ли способ связать таблицы так, чтобы поле datetime(0) обрабатывалось Access как значения datetime?
5 ответов
Согласно TechNet, поддержка нового типа данных datetime2 ограничена. Я бы пошел с datetime, если вы можете.
Аналогичная проблема: РЕШЕНО
У меня есть SQL-сервер с полем как тип данных DATETIME2, и я подключаюсь к нему через ODBC в виде связанной таблицы в MS Access на Win7.
При подключении с двух разных рабочих станций, использующих одну и ту же базу данных, у одного был правильный тип данных "Дата / Время", а у другого был тип данных "Короткий текст"
Решение. Оказывается, что связанные таблицы были созданы с использованием двух разных файлов DSN, один из которых содержал список "DRIVER=SQL Server", а другой - "DRIVER=SQL Server Native Client 11.0". Чтобы иметь тип данных "Дата / Время" через ссылку ODBC, мне нужно было использовать Клиент 11.0.
Чтобы увидеть, какие драйверы вы установили:
From the start menu search for "ODBC"
Select "Data Sources (ODBC)".
Click on the "Drivers" tab
Вы увидите установленные драйверы. У меня есть три.
SQL Server 6.01.7601.17514
SQL Server Native Client 10.0 2007.100.5500.00
SQL Server Native Client 11.0 2011.110.6020.00
Я считаю, что SQL Server версии 6 устанавливается Win7 и обновляется через Центр обновления Windows. Если это все, что у вас есть, вы получите ТЕКСТ из DATETIME2 SQL DataTypes только через связанные таблицы.
Собственные клиенты были установлены в SQL Server Management Studio 2008 и 2012 соответственно.
Вы можете загрузить и установить собственный клиент SQL Server 11.0 по https://www.microsoft.com/en-us/download/details.aspx?id=36434
SSMA для доступа преобразует любое поле даты / времени со значениями, которые недопустимы в SQL Server, в текст. Вы должны запустить SSMA, чтобы попробовать преобразование, и оно сообщит вам о проблемах, а затем вы сможете очистить данные перед фактическим преобразованием.
Вам придется пропустить мастер SSMA, так как он выполняет увеличение без предварительного просмотра результатов.
Я столкнулся с той же проблемой, которая привела меня на эту страницу, но я нашел решение: Проблема: связанные таблицы при доступе к серверу SQL показывают столбцы datetime2 в виде текста, что имеет много последствий, таких как сравнение дат, сортировка и т. Д.
Решение: конвертируйте datetime2 в sql server в date time, и доступ сразу же покажет столбец как поле даты
Обратите внимание, что поскольку в таблицах уже есть данные, вы не можете просто изменять типы данных, я планирую добавить новые столбцы типа datetime, скопировать данные, удалить столбец orig, переименовать
Как проверить точность: я создал таблицу с 3 столбцами на сервере sql, datetime, datetime2, date, затем я связался с ней из доступа, только datetime показывалось как поле даты в доступе, остальные 2 показывались как текст
Как правило, требуется подтвердить ваши даты, прежде чем мастер увеличения размера. Пользователи склонны вводить "глупые" даты, которые принимаются в полях даты доступа, но вызывают ошибку в SQL Server. Попробуйте запросить в таблицах даты за пределами разумного диапазона, например "между 01.01.1930 и 1/1/2020", и исправьте эти даты перед перезапуском мастера изменения размера.
Я также нашел продукт, который я не использовал, но который выглядит хорошо: http://www.upsizing.co.uk/features_translate.aspx