M
MadBear541May 15, 2017, 9:33 p.m.
Проверка наличия записи в БД при выполнении запроса
Есть программа в которой происходит добавление данных в базу SQL. Необходимо реализовать функцию проверки наличия записи при нажатии кнопки "Сохранить", если запись есть должен выполняться запрос Update, в ином случае выполняется запрос Insert. Как это реализовать?
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
AD
- Akiv Doros
- Nov. 11, 2024, 2:58 p.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:50points,
- Rating points-4
m
- molni99
- Oct. 26, 2024, 1:37 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:80points,
- Rating points4
m
- molni99
- Oct. 26, 2024, 1:29 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:20points,
- Rating points-10
Last comments
Circuit switching and packet data transmission networks Angioedema 1 priligy dapoxetine
How to Copy Files in Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
Qt/C++ - Tutorial 068. Hello World using the CMAKE build system in CLion ditropan pristiq dosing With the Yankees leading, 4 3, Rivera jogged in from the bullpen to a standing ovation as he prepared for his final appearance in Chicago buy priligy pakistan
EVILEG-CORE. Using Google reCAPTCHA 2001; 98 29 34 priligy buy
PyQt5 - Lesson 007. Works with QML QtQuick (Signals and slots) priligy 30mg Am J Obstet Gynecol 171 1488 505
Now discuss on the forum
добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
IscanderCheOct. 31, 2024, 3:43 p.m.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь МаксимовOct. 3, 2024, 4:05 a.m.
Можно через QSqlQuery и логический оператор EXISTS сделать.
Также есть статья с проверкой наличия записей в базе данных
Вопрос: есть способ обновить модель QSqlQeuryModel?
Выполнить заново setQuery() с последней применённой QSqlQuery, с помощью метода query()
если использовать model->setQuery(model->query().lastQuery()); ? я так понял что в данном случае он вызывает последний запрос
QSqlQuery всегда содержит только последний запрос, а lastQuery() возвращает этот запрос в виде строки QString, так что, если база данных используется одна, то разницы нет, в каком виде будет передаваться запрос в model->setQuery()
столкнулся с проблемой. приходиться на кнопку дважды нажимать чтоб выполнялся запуск кода приведенного вами. вызов произвожу через connect к данному слоту
Проблема в том, как вы применили код, который я вам привёл, а не в самом коде.
проблема как я выяснил в том что connect соединение с слотом с первого нажатия не производит. а подключается к слоту только со второго нажатия и запускает нормально слот. connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(tww())); вот так соединяю нажатие и слот
Вы запихали connect не в то место в коде. Написали некачественный алгоритм, по которому коннект создаётся не в нужное время.
Еще вопрос, с которым не могу разобраться. Есть ComboBox - raspsel, который позволяет выбрать поле из таблицы. Делаю я это следующим образом:
Теперь вопрос. Как сделать чтобы открыв форму для редактирования я видел выбранное значение и при этом мог поменять значение. через QDataWidgetMapper не получается правильно сделать. Не допонимаю как работает ComboBoxНачнём с того, что QSqlQueryModel является моделью только для чтения, она не может быть редактируемой. А также, ответьте на вопрос. Зачем Вы выполняете метод exec() у QSqlQuery? Когда потом помещаете этот QSqlQuery в модель QSqlQueryModel? Обращение к базе данных происходит дважды.
я так делаю потому что потом планирую сделать библиотеку sql запросов, потом исправлю, сейчас занимаюсь отладкой. Редактируемая же форма QSqlTableModel и QSqlRelationalTableModel. QSqlQueryModel я использую для извлечения данных из одной таблицы.
Ну тогда у QComboBox есть методы currentData(), currentText(), currentIndex() с помощью которых можно забрать текущее значение. Передать его в сторону формы редактирования и с помощью этого значения выбрать нужную строку из таблицы базы данных, чтобы отобразить её в форме для редактирования.
Опишу еще раз ситуацию. Есть таблица в которую посредством SQL запроса ложу данные, так как там необходимо в один столбец выводить несколько значений. Теперь встала проблема что при двойном клике по строке и вызове окна для редактирования программа ложится по сигналу полученному от операционки. я реализовал метод с использованием currentIndex()
edob экземляр формы для редактирования editobject, а obv таблица. при отладке выяснил что как только отрабатывает строка rmap->setCurrentModelIndex(rmod->index(row,0)); в форме редактирования, прилетает сигнал от операционной системы rmap = new QDataWidgetMappe как решить проблему. от QComboBox я на данном этапе отказался. у меня сама форма не отрабатываетВ смысле программа крашится и выдаёт Segmentation Fault?
Ну тогда обращаетесь видимо к объекту, который в данный момент не был инициализирован. Получается, что используете rmap раньше, чем этот объект был создан. Нужно перетряхнуть последовательность действий.
rmap инициализируется после его создания. не знаю что сделал, код не правил, но все заработало. только вот есть косяк о котором ранее не задумался. так как таблица в которой происходит вызов окна редактирования формируется по sql запросу, то индексы актуальны только для одного набора данных, для остальных заполнение происходит не верно. в связи с чем возникает вопрос если для использования QSqlQuery или QSqlQueryModel. Но в первую очередь у меня проблема с тем что сохранение изменений не происходит. Делаю как и всегда mapper->submit() и model->submitAll(). в других случаях все нормально
Так вы используете model->submitAll() и при этом используете QSqlQueryModel в качестве этой model?
Я фиксить баги по таким высказываниям не умею, а экстрасенсы в отпуске. Код показывать следует в таких случаях.
нет. model = new QSqlTableModel
QSqlQueryModel я использую для формирования визуальной таблицы из которой по двойному клику вызываю форму редактирования. в ней же использую стандартный подход QSqlTableModel и QDataWidgetMapper
Тогда после применения настроек в форме редактирования, применяйте обновление данных в вашей QSqlQueryModel.
я так и делаю. после редактирования у меня посылается сигнал по которому происходит обращение к слоту обновления. сначала думал не правильно реализовал. но посмотрев через консоль базы, выяснил что данные не обновились
Никак не могу найти способ чтобы обойти проблему с индексами в форме приведенной на скриншоте. в этой форме отображается информация, о которой говорил ранее, ее я и редактирую. заполнение данной формы происходит при помощи QSqlQueryModel и по ряду показателей. проблема в том что если я меняю значение показателя (критерия отбора) то при выводе в таблицу индексы строк обновляются, т.е. они всегда идут с значения "1", что не соответствует индексу строки в sql таблице. Как результат форма редактирования заполняется не верно. Возможно из-за этого и не отрабатывает обновление данных
Потому, что это не ID, а номера строк самой таблицы. Почитайте вот это сообщение , да и в принципе весь топик.
вообще-то я делаю передачу индекса
где obv та самая таблица из которой я дергую информацию. а editobject форма для редактирования. в editobject индекс я использую в rmap = new QDataWidgetMapper.И дальше что? То, что вы привели мне две эти строчки ещё не говорит о том, что этот код работает правильно.
И вообще-то QModelIndex != ID в базе данных, index.row() != ID в базе данных
Он у Вас работает правильно? Вы получаете обновление данных в базе данных? - НЕТ . Иначе это обсуждение не длилось бы так долго.
А теперь, я увижу достаточно подробный код или нет?
Код форм про которые говорил прикрепил. regrdit форма в которой отображается информация отбираемая из базы. editobject форма для редактирования
Как интересно. У вас используется выборка по условиям везде. Ничего удивительного, что когда создаёте editobject , то получаете не верные данные. Забирая номер строки из одной таблицы, пытаетесь с помощью него получить другие данные в другой таблице. В которой используются совершенно другие условия выборки. Как я и говорил, почитайте топик, что я Вам привёл выше. И забирайте данные не по номеру строки в модели, а по ID записи в базе данных.
P/S/ Код у Вас отвратительный. Если кто-то после вас будет работать с проектом, то ему проще будет написать программу заново.