Тёмный

Qt - Основные классы для работы с БД (часть 3) 

Qt by Lev Alekseevskiy
Подписаться 6 тыс.
Просмотров 12 тыс.
50% 1

В видео показаны особенности реализации операций вставки и удаления строк таблицы БД в зависимости от разных СУБД (автоинкрементное поле или генератор). Показана возможность реализации lookup-полей связанных таблиц (класс QSqlRelationalTableModel).

Опубликовано:

 

23 фев 2015

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 16   
@Sergij-ym3si
@Sergij-ym3si 4 года назад
Огромное спасибо! После суток мучений и поисков нашел решение своей проблемы.
@gms3194
@gms3194 4 года назад
Ваши уроки хороши, вам лайк)
@user-yt4oi3oz1e
@user-yt4oi3oz1e 8 лет назад
Сделайте пожалуйста урок по модель/предстовление, а именно как сделать редактируемую выборку sql из нескольких таблиц. В интернете не получилось найти никаких примеров, а QSqlRelationTableModel может пригодится только в самых простых задачах.
@Den-kd1mx
@Den-kd1mx 7 лет назад
Здравствуйте! Подскажите, пожалуйста, как при связывании связывании таблиц сделать выпадающий список с контекстным поиском(24:31 мы выбираем из трех вариантов, а если их сотня?) )?
@rovsen1993
@rovsen1993 6 лет назад
А можете сделать видео как собрать MySQL на Qt под Андроид? Буду благодарен)
@lollipop4320
@lollipop4320 7 лет назад
Здравствуйте, Лев. У вас очень хорошие видео-уроки по базам данных в Qt, все понятно и легко! Но возник такой вопрос: почему, когда мы поменяли модель QSqTableModel на QSqlRelationalTableModel, перестало работать удаление строк, и изменения, внесенные именно в строки "связанные" с другими таблицами, не сохраняются. Почему так произошло? Есть ли пути решения?
@sorrelofsuccess5513
@sorrelofsuccess5513 3 года назад
Тоже интересует этот вопрос
@ShedowSith
@ShedowSith 8 лет назад
Лев, подскажи пожалуйста. Я использую SqLite, в моей бд несколько таблиц. В коде при использовании QSqlRelationalTableModel с методом setRelation, данные в базе не изменяются. В чем проблема?
@user-nm8mg2oh7b
@user-nm8mg2oh7b 3 года назад
У всех таблиц, участвующих в отношении, должно быть поле id, назначенное первичным ключом. У меня сработало после этого
@npozh
@npozh 4 года назад
Лев, подскажи пожалуста, если запрос inner join мы связываем две таблицы, а если таблиц больше двух, например 3, где есть база данных магазина, где есть корзина, информация об товаре, и об клиенте, и в корзине есть и индекс товара и клиента, как реализовать такой запрос?
@sorrelofsuccess5513
@sorrelofsuccess5513 3 года назад
Подскажите почему при использовании QSqlTableRelationalTableModel не удается корректно добавлять строки?
@user-px4tj9cp9u
@user-px4tj9cp9u 3 года назад
По-моему по БД было больше уроков, вы удалили видео? Зачем?( Я переодически к ним возвращался...
@SapsanMurom
@SapsanMurom 9 лет назад
Лев, для Interbase/Firebird автоинкремент реализуется "внутри" БД с использованием связки "Генератор+Тригер", что дает возможность, равно как и MySQL, вставлять запись со значением NULL первичного ключа. Вероятно, Вы просто не очень хорошо знаете InterBase/Firebird.... К тому же доступа извне к системным (с префиксом RDB$) таблицам у простого юзера нет, а права выдавать ни один админ не будет, я думаю... На локальном сервере или встраиваемом (embedded) "костыли" с ручным получением генератора прокатят, а на реальном - нет. Почитайте на www.ibase.ru В IBExpert автоинкремент реализуется в три клика мыши без единого символа кода с Вашей стороны... В Oracle принцип, вроде, такой же.
@Levolex
@Levolex 9 лет назад
Спасибо за подробный комментарий, но с Firebird-ом я как раз знаком и знаю, что используется генератор + триггер. Просто в том алгоритме создания новой записи, который предполагается в классе QSqlTableModel, вариант с запросом нового значения генератора практически единственно возможный, потому что с триггером вы не получите сгенерированный ID. Для Firebird-а можно было бы использовать returning, но опять-таки в этом случае уже придется создавать свой класс. Я же хотел показать, что можно сделать с чисто библиотечным классом. В одном из следующих видео я как раз хотел подвести неутешительный итог возможностям QSqlTableModel и показать пример реализации собственной модели.
@SapsanMurom
@SapsanMurom 9 лет назад
Может быть я Вас не совсем хорошо понял (в понедельник посмотрю сам), но зачем Вам returning для ID? В MySQL-же Вы тоже фактически NULL вместо ID передаете... В Firebird Ваш запрос "INSERT INTO products ("TITLE") VALUES (?)" где "?" - значение параметра param0, должен отработать правильно при правильной связке "Генератор-Триггер" (триггер на "before insert", т.е. перед вставкой), а потом Вам "Reselect" обновит модель точно также как и для MySQL... Посмотрю - отпишусь.
@Levolex
@Levolex 9 лет назад
Дмитрий Соколов Вы правы в том, что "INSERT INTO products ("TITLE") VALUES (?)" успешно вставит запись в таблицу, но после этого обязательно потребуется именно "reselect", то есть перезапрос всей таблицы. В случае стратегии OnRowChange или OnFieldChange при соответствующем событии будет попытка обновить данные вставленной (одной) строки, но этого не получится сделать, так как не заполнен идентификатор строки (поле ID). Запрос будет следующего типа "SELECT * FROM products WHERE id is null". Так что все равно нужно будет полностью перечитывать всю таблицу или опять-таки отдельным запросом заполнять ID от генератора.
Далее
ЯАVЬ & Gruppa Skryptonite - Beregom (360)
4:47
Просмотров 10 млн
Чего ожидать от HTTP/3 + Go
51:07
Просмотров 8 тыс.
Qt - Использование таймеров в Qt
10:36