|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Добрый день! Извиняюсь что опять поднимаю эту тему. Пока поиском не удалось найти ответ вот на какой вопрос: как сделать так чтобы приложению было все равно какой разделитель стоит у пользователя в региональных настройках". А то кому точка удобна кому запятая, у некоторых EXCEL только с запятой работает. А у меня как запрос на добавление записи с суммой, так так если не точка то не совпадение типов. Как сделать чтобы приложение для себя всегда видело точку, а не запятую? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 10:21 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Не очень ясен вопрос. 1) То ли приложение должно выводить число на экран с точкой - тогда это функция Format 2) То ли приложение должно понимать введенные пользователем данные, тогда сопутствуюшщий вопрос - куда введенные? В тектовое поле? В ячейку экселя? пользователь должен вводить всегда с точкой, а если вводит с запятой - выдавать ошибку? В общем поподробней. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 10:34 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Alex_menА у меня как запрос на добавление записи с суммой, так так если не точка то не совпадение типов.ЗАпрос - что за запрос? SQL-запрос? Туда всегда надо писать с точкой - функция Str. А исходные данные - для функции - должна быть ЧИСЛОВАЯ переменная, а не текст, введенный пользователем. То есть вопрос формирования запроса отсекаем от ввода данных пользователем ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 10:36 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Shocker.Pro, Приложение VB база либо MDB либо SQL. Пользователь вводит сумму в обычный TextBox. По нажатию кнопки "Сохранить" работает запрос на добавление Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
При нажатии кнопки "Изменить соответственно Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Так вот если в региональных параметрах точка то все хорошо, если запятая то несоответствие типов. Любое преобразование внутри кода в формат money бесполезно. Он при отработке запроса все равно берет рег. параметры. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 10:46 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Еще раз повторю, по хорошему нельзя поступать так, как ты делаешь. Нужно собрать все данные, введенные пользователем, в переменные НУЖНОГО ТИПА. То есть все данные должны стать валидными. Мало ли что пользователь понаписал - на него нельзя положиться. К датам это тоже относится! Тут, как я вижу, ты не формируешь SQL запрос на INSERT, а пишешь в рекордсет. И вот тут данные по типам должны четко соответствовать. То есть в дату пишешь переменную типа Date, в money - Currency и т.п. Таким образом ты избежишь ошибок с типами. А ДО этого у тебя должно быть преобразование типа данных, введенных пользователем, в нужный тип. И вот в этом месте мы можем поговорить, как быть с точкой ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 10:51 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Если вышесказанное понятно, то тогда ты должен ответить на вопросы, как ты хочешь поступить, когда 1) Пользователь ввел запятую, региональная настройка - запятая 2) Пользователь ввел запятую, региональная настройка - точка 3) Пользователь ввел точку, региональная настройка - запятая 4) Пользователь ввел точку, региональная настройка - точка а также варианты с пользователь ввел какую-то херь, в региональных натройках какая-то херь ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 10:54 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Shocker.Pro, Значится по пунктам в поле по мере ввода у меня стоит замена запятой на точку, но соответственно результат я получаю текстовый. Далее переменная lcl_sum32 имеет тип Currency. соответственно пробовал следующие варианты присвоения суммы рекордсету: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Так же пробовал менять тип поля в таблице с денежного на double. Ошибка не меняется. Если в рег параметрах запятая то "Type mismatch" сиреч несовпадение типов. Если точка то запрос отрабатывает. Очень бы хотелось чтобы запрос отрабатывал независимо от рег параметров. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 11:04 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Shocker.ProЕсли вышесказанное понятно, то тогда ты должен ответить на вопросы, как ты хочешь поступить, когда 1) Пользователь ввел запятую, региональная настройка - запятая надо чтобы запрос выполнился невзирая на запятую и данные попали в таблицу Shocker.Pro2) Пользователь ввел запятую, региональная настройка - точка При выполнении запроса будет подставлена точка и запрос отработает Shocker.Pro3) Пользователь ввел точку, региональная настройка - запятая надо чтобы запрос выполнился невзирая на запятую и данные попали в таблицу Shocker.Pro4) Пользователь ввел точку, региональная настройка - точка При выполнении запроса будет подставлена точка и запрос отработает Shocker.Proа также варианты с пользователь ввел какую-то херь, в региональных натройках какая-то херь Херь я ввести не дам, при вводе идет проверка на допустимые символа. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 11:08 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Alex_menПри выполнении запроса будет подставлена точка и запрос отработаетеще раз!!!!! Забудь про запрос!!!! Запрос отработает, если у тебя будет переменная типа Currency. Важно то, чтобы данные оказались нужные. Так, собственно, если я правильно понял, тебе нужно, чтобы вне зависимости от того, какой разделитель ввел пользователь, данные преобразовались в Currency. Тогда что-то типа этого: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 11:21 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Alex_menХерь я ввести не дам, при вводе идет проверка на допустимые символа. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 11:22 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Shocker.Pro, Хм спасибо, работает. вопрос такой среди прочего я строил еще и вот такую конструкцию: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Что в ней не так, почему она не отработала. По идее ведь должна отследить наличие запятой и преобразовать ее в точку а далее преобразовать текстовое значение в Currency. Где я ошибся? (если не затруднит, мне надо разобраться чтобы больше по таким граблям не ходить) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 11:35 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Для начала в ней не так то, что CCur работает с ТЕКУЩИМ десятичным разделителем, а ты ему точку подсовываешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 11:44 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Shocker.Pro, Ну собственно проверку на ввод чисел я взял тут на форуме: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
А так же доп проверка по Lost focus это делал я . Скорее всего можно проще но я пока не знаю как :( Эта проверка у меня для всех полей формы Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
вот как то так. Если будут замечания буду рад. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 11:45 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Shocker.ProДля начала в ней не так то, что CCur работает с ТЕКУЩИМ десятичным разделителем, а ты ему точку подсовываешь. А вот это устанавливает текущий разделитель ввиде точки? правильно я понимаю? Код: vbnet 1.
если так то тогда конечно пока я его не установлю Тайп мисмач будет вечен ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 11:47 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Alex_men, Ты меня расстраиваешь очень сильно. Данный код присваивает переменной Delimiter значение текущего системного разделителя ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 11:52 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Shocker.Pro, "Я не волшебник" я стараюсь научиться, просто раньше я этот вопрос обходил стороной. Банально заставляя менять региональные настройки. Сейчас хочу решить его. Я любитель и к моему сожалению не обучался программированию специально, поэтому осваиваю по мере решения конкретных задач и пока еще очень немного знаю. Надеюсь освою :) Во всяком случае вроде на форуме я свои же вопросы не повторяю :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 11:59 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Alex_men"Я не волшебник" я стараюсь научиться, просто раньше я этот вопрос обходил стороной.да не, меня просто расстроило - тут же банальное присвоение значения переменной, которую я к тому же еще и объявил для наглядности. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 12:03 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Shocker.ProAlex_men, Ты меня расстраиваешь очень сильно. Данный код присваивает переменной Delimiter значение текущего системного разделителя Тогда я не понимаю как отрабатывает конструкция Код: vbnet 1.
Допустим в региональных настройках запятая тогда Delimiter получает значение запятая (из системы) Replace(Text1, ".", Delimiter) - меняем точку на запятую (Replace(Replace(Text1, ".", Delimiter), ",", Delimiter))- меняем запятую на запятую CCur(Replace(Replace(Text1, ".", Delimiter), ",", Delimiter)) работает с текущим параметром т.е с запятой. мне так кажется я тут вообще не понимаю. Уж извините за расстройство ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 12:05 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Функция CCur работает с текущим системным разделителем Поэтому все точки и запятые нужно заменить на текущий системный разделитель, чтобы она корректно отработала. При этом системным разделителем может быть хоть "#" ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 12:06 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Shocker.ProAlex_men"Я не волшебник" я стараюсь научиться, просто раньше я этот вопрос обходил стороной.да не, меня просто расстроило - тут же банальное присвоение значения переменной, которую я к тому же еще и объявил для наглядности. вот я и не понимаю чем Delimiter = Format$(0.1, ".") lcl_sum32 = CCur(Replace(Text1, ",", Delimiter)) отличается от lcl_sum32 = CCur(Replace(Text1, ",",".")) и тут и там идет замена командой Replace в строковой Text1 символа запятая на символ точки. вот я чего не понимаю ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 12:09 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Shocker.Pro, а стоп кажется понял если я меняю в строке просто на символ с клавиатуры, то код не воспринимает это как системнй разделитель и продолжает думать что это произвольный код., и соответственно ругается не на присвоение рекордсету а на выполнtние команды Ccur. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 12:11 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Alex_menна символ точки.где тут смайлик, бьющийся головой о стену? В первом случае не на символ точки, а на текущий системный разделитель. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 12:12 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
1) Забудь про клавиатуру - это проблема ввода в тектовое поле 2) Забудь про рекордсет - если ты присваиваешь денежному полю денежную переменную, то тебе абсолютно положить на то, какой в системе стоит разделитель - он в это операции вообще не участвует! У тебя есть одна задача, коректно преобразовать откуда-то взявшийся текст в тип Currency! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 12:15 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Shocker.Pro, Я уже поправился :) а голову жаааааааааааааалко я ей думаю и иногда ем :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 12:15 |
|
Еще раз по региональным настройкам.
|
|||
---|---|---|---|
#18+
Shocker.Pro1) Забудь про клавиатуру - это проблема ввода в тектовое поле 2) Забудь про рекордсет - если ты присваиваешь денежному полю денежную переменную, то тебе абсолютно положить на то, какой в системе стоит разделитель - он в это операции вообще не участвует! У тебя есть одна задача, коректно преобразовать откуда-то взявшийся текст в тип Currency! Понял. Спасибо большое ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 12:21 |
|
|
start [/forum/topic.php?fid=60&fpage=78&tid=2157791]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 138ms |
0 / 0 |