Название: Не работает запрос добавления строки в таблицу Отправлено: lexflax от Январь 14, 2014, 15:34 Доброго времени суток...
Когда делаю запрос в таблицу так Код: QSqlQuery query; Мне нужно чтоб пользователь выбирал что добавлять в таблицу, результаты выбора записываются в переменные типа String но когда эти переменныеставлю взапрос он ничего не добавляет.... где делаю ошибку подскажите??? Код: QString kodsv,kodg,KODK; Название: Re: Не работает запрос добавления строки в таблицу Отправлено: VPS от Январь 14, 2014, 15:42 Попробуйте использовать:
Код: bool QSqlQuery::prepare ( const QString & query ) Название: Re: Не работает запрос добавления строки в таблицу Отправлено: Serr500 от Январь 14, 2014, 17:00 Сам то понял, что написал?
Так надо: Код: QString kodsv,kodg,KODK; Это не perl, переменные в строках не интерполируются! Название: Re: Не работает запрос добавления строки в таблицу Отправлено: dio от Январь 15, 2014, 09:46 Сам то понял, что написал? Так надо: Код: QString kodsv,kodg,KODK; Это не perl, переменные в строках не интерполируются! Так тоже работать не будет. Забыли обернуть значения в кавычки. К тому же, если СУБД кэширует запросы, то забьете кэш ненужными запросами. Правильным решением будет использование связанных переменных. Код: QString kodsv,kodg,KODK; Название: Re: Не работает запрос добавления строки в таблицу Отправлено: Bepec от Январь 15, 2014, 10:21 Не соглашусь, dio.
Числовые значения не нуждаются в "обёртке". А тут как раз они и есть. И что значит забить ненужными запросами? А ваш приведённый код полный аналог кода Serr500. Просто по другому оператор развернули. Название: Re: Не работает запрос добавления строки в таблицу Отправлено: dio от Январь 15, 2014, 11:01 Про числовые значения, действительно упустил. Смутила строка
Цитировать QString kodsv,kodg,KODK; Приведенный выше код работать будет. А вот то, что это аналогичный код, с этим не согласен. В моем случае используются связанные переменные, в этом случае интерпретатор SQL будет воспринимать команды с разными значениями как одну и туже (в кэш попадет только одна запись). В предыдущем же варианте, каждая команда уникальна и попадет в кэш запросов СУБД. Массовое выполнение подобных команд приведет к росту кэша и вытеснению из кэша других команд, что существенно скажется на производительности системы в целом. Название: Re: Не работает запрос добавления строки в таблицу Отправлено: Hellraiser от Январь 15, 2014, 11:06 2 Dio Далеко не каждая СУБД уметь работать с именованными параметрами запроса, возможно, лучше использовать позиционный параметр ? и обращаться при бинде по номеру позиции.
Название: Re: Не работает запрос добавления строки в таблицу Отправлено: dio от Январь 15, 2014, 11:26 Работа с СУБД в Qt осуществляется через драйвер SQL. Он и разруливает как связывать переменные, по порядку или по имени. По имени - код наглядней, меньше возможностей ошибиться.
Название: Re: Не работает запрос добавления строки в таблицу Отправлено: Hellraiser от Январь 15, 2014, 11:42 Это да, но после того, как пришлось убить почти день на поиск бага в программе, от такой практики я отказался. Весь фокус в том, что если при бинде перепутать порядок следования параметров запроса, то в базу может уйти что-то левое.
Название: Re: Не работает запрос добавления строки в таблицу Отправлено: Bepec от Январь 15, 2014, 12:02 Не знаю насчёт интерпретатора SQL и запросов, но для SQLITE и тот и этот запрос одинаковы.
Название: Re: Не работает запрос добавления строки в таблицу Отправлено: Hellraiser от Январь 15, 2014, 12:08 А что, кто-то всерьез рассматривает SQLite как полноценную СУБД? :)
Название: Re: Не работает запрос добавления строки в таблицу Отправлено: dio от Январь 15, 2014, 12:09 Hellraiser Да уж, неприятный баг. К счастью не сталкивался. А с какой СУБД и какая версия Qt?
Название: Re: Не работает запрос добавления строки в таблицу Отправлено: carrygun от Январь 15, 2014, 12:10 А что, кто-то всерьез рассматривает SQLite как полноценную СУБД? :) В качестве локальной БД - очень хороший вариант.Название: Re: Не работает запрос добавления строки в таблицу Отправлено: Hellraiser от Январь 15, 2014, 12:39 Hellraiser Да уж, неприятный баг. К счастью не сталкивался. А с какой СУБД и какая версия Qt? Это было на 2007 Access`e, а кьют был, кажется, какой-то из 4.6 - давно это было, точно не помню. Но урок запомнился. Сейчас работаю с Постгресом, он тоже не поддерживает именованные параметры.Название: Re: Не работает запрос добавления строки в таблицу Отправлено: Bepec от Январь 15, 2014, 12:58 В качестве переносимой базы sqlite идеален. Быстр, прост, возможно открытие в сотнях различных менеджерах, поддержка стандарта. Можно быстро перенести таблицы и запросы в другую субд.
Как то для Access писали, так потом переносить замучались :D Собственные параметры, функции. Ужас. :D Название: Re: Не работает запрос добавления строки в таблицу Отправлено: lexflax от Январь 17, 2014, 15:29 Доброго времени суток.
В таблицу Kod с полями kodsv integer NOT NULL, kodg integer NOT NULL, kodk integer NOT NULL Нужно добавить информацию с комбобоксов...., 1 и 2 комбобокс содержат именно значения ключей kodsv,kodg, А вот 3 комбобокс наполняется названием квалификации а не кодом... в этом возникает сложность... так как для добавления мне нужен kodk... Взять его можно из таблицы Kvalif которая имеет два поля kodk integer NOT NULL, - нужный мне код!!!!! namekvf text NOT NULL, - название которое пользователь выбирает в 3 комбобоксе!! Сейчас код выглядит так... Код: QSqlQuery querys; Моя задача получить kodk , зная значение namekvf... Пробовал так... Но тогда вообще ничего не добавляется.... Посмотрите может подскажите варианты кодов , опробую... Код: void Form4::on_pushButton_clicked() Название: Re: Не работает запрос добавления строки в таблицу Отправлено: lexflax от Январь 17, 2014, 15:59 Все тема снята.... затупил капец как)))
Код: void Form4::on_pushButton_clicked() Название: Re: Не работает запрос добавления строки в таблицу Отправлено: demal от Январь 22, 2014, 21:03 Смотря твои разные темы я понимаю, что ты используешь для отображения вьюху, но все остальное делаешь в рукопашную через прямые запросы.
Чего не работаешь через модель? ::) С ней кода будет меньше. Combobox заполнишь просто: QSqlTableModel model; model.setTable("Имя таблицы"); combobox.setModel(model); combobox.setModelColumn(номер столбца таблицы); model.select(); Всё заполнено. Как вставлять и удалять в таблице я тебя уже писал тебе |