Настройка MS Access, чтобы игнорировать ошибку преобразования даты - PullRequest
0 голосов
/ 01 июля 2011

БД Access импортирует текстовый файл фиксированной ширины;один столбец в основном даты.Когда дата недоступна, создатель файла фактически использует строку «Null». Access помещает строку в таблицу с этим полем, фактически равным NULL.

Но когда файлы начали приходить с разными значениями ширины поля, я копировалDB, подправил значения начала / ширины во входной спецификации и импортировал.ТЕПЕРЬ, все строки с нулем входят в систему (таблица) _import_errors как ошибка при преобразовании текста в дату.

Я не нашел настройки (не то, что я ее изменил), чтобы объяснить это.Одно из отличий состоит в том, что хотя обе БД имеют формат Access 2000, оригинал находится на компьютере, на котором все еще установлен Access 2000, а новый обрабатывается Access 2003.

Это изменение поведения в Accessверсия?Является ли предварительная обработка файла единственным решением?


Спасибо, Дэвид.Это то, что я бы сделал (за исключением части Excel), если бы он не исправил себя.Я опубликовал это, но, видимо, кому-то не понравилось публичное признание того, что в Access есть ошибки.

Единственное, что изменилось, это то, что два других столбца при вводе простого текста фиксированной ширины были шире.Тем не менее Access «решил» отбросить всю строку, а не только поле даты для трех последовательных попыток.В четвертый раз он все еще сообщал об этом как об ошибке, но импортировал оставшуюся часть строки.

Итак, когда Access работает неправильно без причины, попробуйте еще раз или два, а затем попробуйте явно кодировать преобразование из текста.

1 Ответ

0 голосов
/ 02 июля 2011

Две возможности:

  1. Используйте поле буфера или таблицу буферов, которая импортирует поле даты в текстовое поле. Затем вы можете обработать это в соответствующие значения в конечном поле назначения.

  2. Используйте импорт SQL вместо DoCmd.TransferText. В этом случае вы используете строку подключения в предложении FROM, чтобы вы могли затем обработать поле даты в вашем SELECT:

  SELECT Sheet1.FirstField, Replace(Sheet2.DateField, "NULL", Null) As DateField 
  FROM Sheet1 IN 'C:\Import\Spreadsheet.xls'[Excel 5.0;HDR=YES;IMEX=1;];

Преобразуйте это в запрос INSERT, и вы получите золото.

...