powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA->SQL запрос -> Как запятую точкой заменить???
25 сообщений из 66, страница 2 из 3
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470496
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И почему "не получиться вставить стринг в числовое поле"?
Потому что при выполнении запроса возникает ошибка 'несоответствие типов данных'
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470498
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
епрст
а теперь по-русски, пожалуйста :)
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470513
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Топик длинный вышел, так что повторю вопрос:
В запросе на вставку есть строка
Код: plaintext
CDbl( " & Format(Me![fld_Sum] * YeRate(Me![lst_Currency]) / (YeRate(YeType("  1  ")) * YePer("  1  ")), " #.## ") & " )

При выполнении запроса возникает ошибка: Неверное число аргументов функции в выражении запроса CDbl(905,345).
Что мне с этим делать?
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470524
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если так часто делаешь динамические запросы.

Напиши один раз свою функцию преобразования числа в строку и используй ее вместо всяких Format, CDBL, STR ...

Например так

Код: plaintext
1.
2.
3.
4.
5.
public function f_dbl2str(d_value)

f_dbl2str=format(d_value,  "#.##" )
f_dbl2str=replace(f_dbl2str,  ","  ,  "." ,  1 , - 1 , vbTextCompare)

end function
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470534
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да пытался я уже это делать.
Все подобные функции возвращают нечисловое значение. И при выполнении запроса возникает ошибка: "...не добавлены записи...ошибка преобразования типа"
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470545
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serge Gavrilov
Все таки ты оказался прав! Видать я что-то не так делал с этой Str. Вот так работает:
Код: plaintext
( " & Str(Format(Me![fld_Sum] * YeRate(Me![lst_Currency]) / (YeRate(YeType("  1  ")) * YePer("  1  ")), " #.## ")) & " )

Всем спасибо
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470546
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У всех работает у тебя нет - странно.

Не получается так сделай через рекордсет.

rst.AddNew
rst!f1=forms!f1!f1
...
rst.update

И все.
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470610
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
incoldНапиши один раз свою функцию преобразования числа в строку и используй ее вместо всяких Format, CDBL, STR ...

Мне кажется функция с использованием Replace будет работать медленнее, чем Str
(не сравнивал)
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470621
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Всеволод, а зачем Str(Format? Format и так возвращает стринг. Так что уж или Format, или Str.
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470623
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМне кажется функция с использованием Replace будет работать медленнее, чем Str (не сравнивал)

Точно будет, можно и не сравнивать.
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470823
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычВсеволод, а зачем Str(Format? Format и так возвращает стринг. Так что уж или Format, или Str.
Нет, ему нужен как раз и Format и Str. Почему?

Format нужен для того, чтобы было 2 знака после запятой, но он вернет запятую, если в системе разделитель запятая:
?format(5/3,"#.##")
1,67

Str нужен для того, чтобы разделителем была точка независимо от установок системы, но Str не дает определить число знаков
?str(5/3)
1.66666666666667

А совместное применение дает нужный результат
?str(format(5/3,"#.##"))
1.67
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470835
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Что-то тут не так. Мне не нравится, когда в функцию подставляют параметры не того типа. Str не рассчитан на строковой параметр.
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470848
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧто-то тут не так. Мне не нравится, когда в функцию подставляют параметры не того типа. Str не рассчитан на строковой параметр.

?isnumeric(format(5/3,"#.##"))
True
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470861
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
При чем тут IsNumeric? IsNumeric берет строковое значение и проверяет, может ли оно трактоваться как запись числа . А я говорю про числовое значение .

"1" - это строковое значение
1 - это числовое значение
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470865
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще добавлю, в Help сказано, что аргумент может задаваться любым допустимым числовым выражением. Что такое числовое выражение?

Любое выражение, значением которого является число. Числовое выражение может быть образовано из любой комбинации ключевых слов, переменных, констант и операторов, которая в итоге возвращает числовое значение.

Для проверки числового значения существкет IsNumeric:
Возвращает значение типа Boolean, показывающее, имеет ли выражение числовое значение.
IsNumeric возвращает True, значит все в порядке?
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470869
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Копирую свою предыдущую реплику. :^)
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470873
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формально Саныч прав, имхо лучше
Код: plaintext
str(round( 5 / 3 , 2 ))
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470886
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКопирую свою предыдущую реплику. :^)

авторПри чем тут IsNumeric? IsNumeric берет строковое значение и проверяет, может ли оно трактоваться как запись числа. А я говорю про числовое значение.

Достаточно вольное трактование IsNumeric, откроем еще раз Help

Функция IsNumeric
Возвращает значение типа Boolean, показывающее, имеет ли выражение числовое значение.

Что и требовалось доказать.

Хотя если религия запрещает, то можно и не использовать :)
Так устроит?:
?str(cdbl(format(5/3,"#.##")))
1.67
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470896
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(c)VIGФормально Саныч прав, имхо лучше
str(round(5/3,2))

А, например, в A97 нет Round
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470898
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
авторФункция IsNumeric
Возвращает значение типа Boolean, показывающее, имеет ли выражение числовое значение.
Здесь одна вещь недоговорена. IsNumeric снимает с выражения кавычки (как Eval) и смотрит, что было бы, если бы это выражение без кавычек оказалось прямо в программе.

Смешивать строковые значения с числовыми нельзя. Они ведут себя по-разному. Иногда Аксесс умеет преобразовать их к тому, чего интуитивно хочется, а иногда нет.

?"1"+1
2
?"1"+"1"
11

авторХотя если религия запрещает, то можно и не использовать :)
Так устроит?:
?str(cdbl(format(5/3,"#.##")))
1.67
Да, я к этому и клоню.
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470913
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЗдесь одна вещь недоговорена. IsNumeric снимает с выражения кавычки (как Eval) и смотрит, что было бы, если бы это выражение без кавычек оказалось прямо в программе.

Не совсем так
?eval("5/3")
1,66666666666667
?IsNumeric("5/3")
False
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470921
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ну в самом деле! Я ведь не говорил, что IsNumeric и Eval возвращают одинаковые значения! Я только сказал, что они обе снимают с выражения кавычки. И именно этот акт снятия кавычек нельзя игнорировать.
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470934
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем то , это спор ни о чем. Format возвращает variant , который в разных функциях может трактоваться по разному.
В частности isnumeric(format(5/3,"#.##")) понимает его как число.
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470935
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу в самом деле! Я ведь не говорил, что IsNumeric и Eval возвращают одинаковые значения! Я только сказал, что они обе снимают с выражения кавычки. И именно этот акт снятия кавычек нельзя игнорировать.

Еще раз
?IsNumeric(5/3)
True
?IsNumeric("5/3")
False

Дык, не сняло же кавычек!
Так, я тоже могу сказать, что в Help по Str "одна вещь недоговорена: Str снимает с выражения кавычки (как Eval)":
?Str("2")
2

Интересно поговорили,
увы, меня больше нет
...
Рейтинг: 0 / 0
VBA->SQL запрос -> Как запятую точкой заменить???
    #32470961
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
2 VIG:

Как раз IsNumeric понимает его как стринг.

2 Serge Gavrilov:

Разница между IsNumeric и Eval в том, что IsNumeric понимает только числовые константы, найденные между кавычками, а Eval - также и выражения. Но они обе анализируют внутреннее наполнение стринга .

Что касается примера с Str, то там кавычки снял дебаггер - он всегда выдает строковые значения без кавычек.
...
Рейтинг: 0 / 0
25 сообщений из 66, страница 2 из 3
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA->SQL запрос -> Как запятую точкой заменить???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]