Хорошо, поэтому после некоторого дополнительного копания кажется, что типы «Валюта» предпочтительнее типов «Десятичный». Другими словами, использование adCurrency для ADO или OleDb.Currency будет работать для сохранения десятичных значений в поля MS Access Currency.
Только в случае, если это подходит для кого-то еще - я найти очень странное поведение в случае ADO следующим образом:
Мой код инстанс новый ADODB Command и создать коллекцию параметров - в том числе некоторые набраны, как adCurrency. Затем я начал обновлять несколько записей в моей базе данных. Я повторно использовал один и тот же командный объект для каждого обновления и вызвал метод для сброса всех полей параметров до 0 до того, как был запущен следующий блок обновлений. Это привело к плохим данным в моих полях (см. Начальную проблему, описанную выше). Я пробовал много вещей, чтобы исправить это и не увенчался успехом. Я даже прокомментировал вызов метода ResetParameters, чтобы убедиться, что поведение не было связано.
Исправление: вместо повторного использования командного объекта я, наконец, решил создать новый новый объект команды перед каждым блоком обновления. Внезапно все мои десятичные значения появились в Access правильно, независимо от моих настроек локали.
Таким образом, после вызова метода Execute что-то было изменено на моем объекте команды, так что параметр adCurrency при последующих обновлениях был нарушен. Кстати, результаты были следующими: значение 4,32 появится в Access как 432 (это будет форматирование валюты Эквадора). Мой код не был слишком сложным, и я не буду публиковать его здесь, но мы были вдвоем, глядя на это довольно сложно, и мы просто не видели ничего, что могло бы это объяснить. На самом деле идея создания нового экземпляра возникла, когда мы написали тестовое приложение, которое вызвало только одно обновление, и ТОЧНЫЙ ИСТОЧНИК КОДА, РАБОТАЕМ В ТЕСТЕ, ОЖИДАЕМОМ.
Остерегайтесь повторного использования объектов команды ADO для нескольких обновлений, если вы пишете локализованное приложение.