Как мне создать маску для числового поля? |
Здравствуйте, гость ( Вход | Регистрация )
Как мне создать маску для числового поля? |
Litkevich Yuriy |
14.9.2009, 15:22
Сообщение
#11
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
mva |
14.9.2009, 15:30
Сообщение
#12
|
Участник Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: 0 |
Мне нужно генерировать маску для любого поля типа NUMERIC исходя того, как они заданы в PostgreSQL. Не важно, сколько знаков после запятой и сколько целочисленных знаков, все должно делаться автоматически в том числе и для пустых таблиц. Так, что если я добавлю новые поля типа NUMERIC в какую-либо таблицу в БД, то для этого не нужно было бы править код клиентского приложения.
|
|
|
SABROG |
14.9.2009, 15:31
Сообщение
#13
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
- типу вводимых значений (int, float, char) Я понял, что по типу БД (NUMERIC(10,3) ...)Кажись понял, это скалярный тип. Может быть через метод Type QVariant::type () const получится? --- Не прокатит. Qt под одну гребенку следующие типы приводит к double:
Сообщение отредактировал SABROG - 14.9.2009, 15:37 |
|
|
mva |
14.9.2009, 15:53
Сообщение
#14
|
Участник Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: 0 |
Не прокатит. Qt под одну гребенку следующие типы приводит к double: Вот именно. Подсмотрел через сниффер. Оказывается, Qt ничего не знает о типе числовых полей. Она просто тупо отображает то, что получает от SQL сервера. Похоже, при открытии таблицы придется дополнительно делать запрос на сервер о более подробной информации о полях таблицы. |
|
|
mva |
14.9.2009, 16:42
Сообщение
#15
|
Участник Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: 0 |
Нашел вот такую функцию, с помощью которой можно было бы сгенерить маску:
QString QSqlDriver::formatValue ( const QSqlField & field, bool trimStrings = false ) const [virtual] Но она работает только с непустыми записями. Решил при открытии таблицы делать запрос на сервер о дополнительной информации по столбцам. Для PostgreSQL это будет примерно так: SELECT column_name, data_type, numeric_precision, numeric_scale FROM information_schema.columns WHERE table_name LIKE '...' Сообщение отредактировал mva - 14.9.2009, 16:44 |
|
|
Litkevich Yuriy |
14.9.2009, 18:33
Сообщение
#16
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
mva, Я думаю, троли для начала PostgreSQL поддержали в надежде, что кто-нибудь патчи по присылает. А желающих допилить драйвер не нашлось.
|
|
|
abra |
14.9.2009, 22:19
Сообщение
#17
|
Студент Группа: Участник Сообщений: 68 Регистрация: 12.1.2009 Пользователь №: 485 Спасибо сказали: 11 раз(а) Репутация: 2 |
Слушай.А не понимаю тебя человек....Я же написал тебе код.
Ты же можешь узнать,какой размерность данные хранятся в БАЗЕ,можешь.Это делается путём SQL запроса. Узнаешь,получаешь скажем num 3,2. А дальше смотришь. 3 знака до запятой и 2 знака после. Указываешь в inputMask Этого поля 999,99. P.S Точнее не код я тебе написал,а алгоритм.Если сложно реализовать,скажи,покурим вместе. P.P.S О.Прочитал выше твой пост=))) Ну вот да.Так же и делай.Я это и пытался до тебя донести.=) |
|
|
mva |
15.9.2009, 9:48
Сообщение
#18
|
Участник Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: 0 |
Слушай.А не понимаю тебя человек....Я же написал тебе код. Ты же можешь узнать,какой размерность данные хранятся в БАЗЕ,можешь.Это делается путём SQL запроса. Узнаешь,получаешь скажем num 3,2. А дальше смотришь. Я думал, что в Qt есть специальные средства для этого. Оказалось, что нет. Ведь если подключать другую базу, то соответственно и этот запрос может быть другим. Впрочем, я сразу предусмотрел работу с базами с использованием паттерна "Фабрика". Так что основной код потом переписывать не придется. Сообщение отредактировал mva - 15.9.2009, 9:51 |
|
|
Текстовая версия | Сейчас: 14.1.2025, 15:49 |