Russian Qt Forum
Ноябрь 24, 2024, 07:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сообщения БД.  (Прочитано 3963 раз)
cya-st
Гость
« : Декабрь 05, 2009, 21:43 »

Всем привет.
Есть таблица (PostgreSQL):
Код
SQL
CREATE TABLE Test
(
 id SERIAL UNIQUE,
 DTPost TIMESTAMP NOT NULL,
 ...
 PricePost NUMERIC(10,2),
 PriceProd NUMERIC(10,2),
 CONSTRAINT m_SkladOsnid PRIMARY KEY (id),
 CONSTRAINT "PricePost >= 0" CHECK (PricePost >= 0),
 CONSTRAINT "PriceProd >= 0" CHECK (PriceProd >= 0)
);
 
Установлено CONSTRAINT, но при добавлении записи минусовое число (например PricePost= -1.00), запись не добавляется и не выводится сообщение CONSTRAINT. Запись добавляется в QTableViews. Подскажите пожалуйста как вывести сообщение.
Записан
MoPDoBoPoT
Гость
« Ответ #1 : Декабрь 05, 2009, 22:25 »

Из контекста догадываюсь, что ты пользуешся QSqlTableModel (или производным классом от него).
Узнать об ошибке можно вызвав метод  lastError().
В представлении ты видишь новую некорректную строку из-за стратегии редактирования QSqlTableModel::OnManualSubmit (все изменения в модели кэшируются до submitAll()/revertAll())
Если ты вводишь значения прямо во вьющке, то на нее можно повесить делегата, который будет накладывать заведомо известные ограничения. А если изменения производятся через диалог, то пользуйся валидоторами.
Записан
cya-st
Гость
« Ответ #2 : Декабрь 05, 2009, 22:37 »

Я вставляю прямо на вьюшке:
Код:
    md.insertRow(model->rowCount());
    md.submit();
Цитировать
В представлении ты видишь новую некорректную строку из-за стратегии редактирования QSqlTableModel::OnManualSubmit (все изменения в модели кэшируются до submitAll()/revertAll())
Если ты вводишь значения прямо во вьющке, то на нее можно повесить делегата, который будет накладывать заведомо известные ограничения. А если изменения производятся через диалог, то пользуйся валидоторами.
Не понял, поподробней можно?
Записан
MoPDoBoPoT
Гость
« Ответ #3 : Декабрь 06, 2009, 13:24 »

Кхм, просто в первом посте как-то неоднозначно было написано Улыбающийся
...запись не добавляется и не выводится сообщение CONSTRAINT. Запись добавляется в QTableViews....
Я подумал что запись не добавляется в БД, но добавляется в модель (видна во вьюшке).

Код:
    md.insertRow(model->rowCount());
    md.submit();
А этот код тебе и не добавит запись в БД, т.к. запись пустая, а в таблице есть ОЦ DTPost TIMESTAMP NOT NULL
Перед submit() надо заполнить запись значениями. Для этого удобней воспользоваться методом QSqlTableModel::insertRecord().
Записан
cya-st
Гость
« Ответ #4 : Декабрь 07, 2009, 17:31 »

Вообщето добавляет запись даже без submit. После выполнения md.insertRow(model->rowCount());, появляется новая строка, где я ввожу данные. Но если PricePost я введу меньше нуля, то запись не добавляется и не появляется сообщение CONSTRAINT, вопрос в том, как мне этот CONSTRAINT показать?
Записан
MoPDoBoPoT
Гость
« Ответ #5 : Декабрь 07, 2009, 18:31 »

Вообщето добавляет запись даже без submit.
В БД добавляется?
вопрос в том, как мне этот CONSTRAINT показать?
Метод QSqlTableModel::submit() возвращает признак успеха/неуспеха операции. Для получения доступа к информации об ошибках используй QSqlTableModel::lastError(). А для отображения ошибки есть QMessageBox.
Записан
cya-st
Гость
« Ответ #6 : Декабрь 07, 2009, 20:06 »

Заработало. Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.058 секунд. Запросов: 21.