|
---|
И что Вы предлагаете? Access (по крайнем мере А2003) не очень "дружит" с такими типами данных как "Date", "Numeric(p, s)", "Decimal(p, s)", "Smallmoney", "Money" и другие типы. Допустим, у Вас в наличии А2003 и SQL Server 2008, а Вам нужно хранить скажем копейки. Тогда как Вы поступите? На стороне сервера нету типа "Currency", но есть "Smallmoney" и "Money". Если есть альтернатива, ну тогда напишите. Только вот "Smallmoney" и "Money" выбирать нельзя, иначе будут выскакивать точно такие же ошибки как ТС написал. Я с удовольствие прочту и учту на будущее. |
Кхм…кони … люди …
Давайте как-нибудь отделять
Причин, по которой у топикстартера возникает именно его ошибка, может быть несколько
Одна из возможных указана в файле
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=492885&msg=4900746на странице 13 – decimal столбец выбран в качестве ключевого и Jet не может правильно позиционироваться из-за потери точности. Решение – выбрать другой локальный уникальный индекс.
Другая в этом же документе на странице 14 (How ODBC Datatypes Are Mapped to Jet Types) – если precision > 15 и csale <> 4,
То происходит примерно следующее: пока числа не слишком большие, Jet транслирует их в double, затем встречая значение, не укладывающееся в правила, показанные в таблице ,
Он перескакивает к правилу преобразования, показанному в примечании к таблице.
С точки зрения Jet – это смена типа значения в столбце. Что и приводит к характерной ошибке.
Хорошего решения я не знаю. Сам, вероятно, предпочитал бы явную конвертацию к строке с обратным преобразованием к decimal на клиенте.
Ошибка такого сорта не проявится, если значения в столбце окажутся одного порядка.
Столбец либо нормально отобразится как допустимое по таблице конвертации числовое значение, либо как текстовое.
Касательно остальных коней и money в частности.
Money и smallmoney не имеют размерных проблем и при всех нормальных случаях должны безошибочно преобразовываться к currency.
Если с ними какая-то проблема, то, почти наверно, она лежит в плоскости несовпадения локальных установок для сеанса, обслуживающего соединение и локальных установок, используемых jet.
Для линкованных таблиц это должно решаться настройками драйвера, отвечающими за локализацию сеанса. (Может быть, еще – подбором драйвера. Какой-то из них м.б. предпочтительней другого для конкретной версии сервера)
Для ADP, вероятно, придется испустить подходящий DOCMD.RunSQL (см форум – RunSql в контексте ADP)
PS
я не работаю ни с акцессом, ни, тем более с скл сервером.
Поэтому никаких конкретных рекомендаций, проверок, демонстраций и т.п. не привожу.