102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
|
||||||
1 | ||||||
Преобразование типов данных в Access 201305.07.2015, 18:09. Показов 4749. Ответов 18
Метки нет (Все метки)
Ошибка 13 (преобразование данных). Но только в Access 2013. Сам я работаю в 2010. Работает без проблем.
Что делать? Добавлено через 28 минут Тип ячеек - текстовый.
0
|
05.07.2015, 18:09 | |
Ответы с готовыми решениями:
18
Импорт данных в Access 2013 из Excel 2013 Преобразование типов в MS Access 2003 Фильтр по выделенному Access 2013, поиск и подбор данных через шаблон поиска Преобразование данных в SQL Access-а |
Модератор
|
|
05.07.2015, 18:12 | 2 |
выведите в отладку ваши rst(63) и rst(71)
и проверьте, что в них --- а заодно и тип rst(72)
1
|
шапоклякистка 8-го дня
|
|
05.07.2015, 18:22 | 4 |
Для начала - опубликовать не только оператор, вызывающий ошибку, но хотя бы и описание переменных и операторы присваивания. И рассказать, какого результата вы хотите в конечном итоге добиться этим оператором.
Потому что мне не очень ясно, зачем результат округления до 2 цифр после запятой преобразовывать к типу Simgle только для того, чтобы результат преобразования присвоить текстовой (?) переменной.
0
|
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
|
||||||
05.07.2015, 19:10 [ТС] | 5 | |||||
1.
Тип везде текстовый. rst(63)="400000" и rst(71)="49506.43" - споткнулся же на первой строчке
Ещё раз повторяю, в Access 2010 работает. В Access 2013 - нет! Может библиотеку какую-нибудь подключить? Добавлено через 5 минут 2 Да, да да... И за одно и проект... И выслушивать, почему я взялся за программирование вообще...
0
|
шапоклякистка 8-го дня
|
|
05.07.2015, 19:27 | 6 |
Смысла врать, спрашивая совета по работе кода, ровно столько же, сколько врать о симптомах на приеме у врача.
Приведенный вами код и в 2010 работать не может. Хотя бы потому, что текстовой переменной значения оператором Set не присваиваются. Set работает только с объектами. Также ошибку даст преобразование к типу Double переменной myString2, ибо точка - не десятичный разделитель. С удовольствием. Давно жажду познакомиться с этим зверем. Давайте доступ.
0
|
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
|
||||||
05.07.2015, 19:35 [ТС] | 7 | |||||
- это относилось к тем у кого этот Access установлен. (без обид)
Добавлено через 1 минуту Извините.
0
|
шапоклякистка 8-го дня
|
||||||
05.07.2015, 20:04 | 8 | |||||
Ладно, я готова поверить, что у вас в региональных стандартах действительно в качестве десятичного разделителя выставлена точка. Бывает экзотика.
А, другое дело. Вот теперь давайте пошагово вылавливать проблему. Сейчас напишу, как. Добавлено через 4 минуты Для начала, давайте попробуем заставить ваш оператор таки вернуть результат вычисления. Я предлагаю так: myString3 = Round(Val(myString1) / Val(myString2), 2) Добавлено через 13 минут Aleator, попробуйте - работает или нет:
Добавлено через 6 минут А вообще, сейчас будем тренироваться на кошках. Качаю рантайм-версию 2013 ))) Чего не сделаешь для науки )))
0
|
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
|
||||||
05.07.2015, 20:05 [ТС] | 9 | |||||
Я попробовал в своей БД:
Итого, имеем разную работу функции CDbl в Access 2010 и Access 2013.
0
|
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|
05.07.2015, 20:08 | 10 |
texnik-san, в ВБА, в качестве десятичного разделителя может только точка. Никак иначе. Надо применять функцию STR, которая всегда дает точку.
У меня, например, так. И у большей половины моих заказчиков тоже точка.
0
|
шапоклякистка 8-го дня
|
|
05.07.2015, 20:23 | 11 |
Просто сработало, или дало именно тот числовой результат, который нужен?
Потому что функция Val очень своеобразная. Она преобразует строку в число до того символа, до которого у нее получается это сделать, и игнорирует остальные. В частности, если точка ее не устраивает как разделитель дробной части - она может просто взять целую часть числа. Не факт. Попробуйте свой старый код с запятой вместо точки. Добавлено через 1 минуту Речь не о коде vba, а о функции CDbl - она десятичный разделитель берет из региональных настроек. Добавлено через 50 секунд Опять же, вопрос не в том, что она дает, а в том, что берет. Добавлено через 11 минут Вот если бы код был CDbl (49506.43) - тут да, тут только точка возможна. А CDbl ("49506.43") уже не так.
0
|
шапоклякистка 8-го дня
|
|
05.07.2015, 20:39 | 13 |
К аргументу, в явном виде прописанном в коде программы, требования одни, к текстовой строке, передаваемой в виде аргумента - совсем другие. В текстовой строке можно и запятую, и вообще любые символы, не имеющие отношения к числам. Даже Val("4356ы32") - можно. Но результат будет 4356.
Добавлено через 2 минуты Кстати, в только что установленной рантайм версии 2013 оператор CDbl("49506,43") у меня сработал. Именно с запятой.
0
|
шапоклякистка 8-го дня
|
|
05.07.2015, 20:59 | 15 |
В том-то и дело, что может быть деление на ноль, а может быть и 10, и зависит это от региональных настроек. У меня это таки 10.
Поэтому ждем ответа от автора темы, получил ли он именно то числовое значение, которое ожидал, или нет. Если нет - нужно принять волевое решение о дальнейшем пути исправления ошибки. Варианты 1) поменять настройки региональный стандартов (сделать, чтобы десятичным разделителем стала таки точка) 2) добиться замены точки на запятую еще при присваивании значения 3) заменять точку на запятую при передаче параметра 4) написать фукнцию преобразования строки в число, которой все равно, точка там или запятая. Добавлено через 8 минут А нет, соврала. 10 именно с CDbl, Val таки деление на ноль. Сори.
0
|
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
||||||
05.07.2015, 21:37 | 19 | |||||
Кстати, texnik-san, может быть это Вас заинтересует в связи разным десятичным разделителем на разных ПК. Довольно легко узнать какой же именно десятичный разделитель на машине, нужно только вычислить выражение format(0,"."):
2
|
05.07.2015, 21:37 | |
05.07.2015, 21:37 | |
Помогаю со студенческими работами здесь
19
Access 2007. Преобразование текстового формата данных в числовой. Фильтрация данных основной формы через данные подчиненной формы в MS Access 2013 Переход от Access 2003 на Access 2013 Преобразование типов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |