Russian Qt Forum

Qt => Базы данных => Тема начата: Hornet от Январь 06, 2017, 20:20



Название: qt+mysql
Отправлено: Hornet от Январь 06, 2017, 20:20
Здравствуйте.
Раньше пользовался скриптом для поиска данных в базе, но решил сделать графическую форму для поиска
(http://form.png)
 коннект работает простой запрос при нажатии кнопки тоже работает "Вывод данных".
Но сталкнулся с такой проблемой в поле lineEdit..1 ...2...3 нужно заполнить данные и она должна проитись по таблицам
и наити их, и вывести что нашла.
как sql код совместить с тем что щас есть.Ив sql коде подставить значения lineedit..2.....3


Название: Re: qt+mysql
Отправлено: demal от Январь 08, 2017, 01:42
QString filtr= QString(tr("Select * From блабла where ххх=%1").arg(ui->lineEdit1->text()));
и так до  9 аргументов.


Название: Re: qt+mysql
Отправлено: Hornet от Январь 08, 2017, 22:16
Можно по подробней попробывал не получилось.
Мне в условие where надо подставить Фамилия linerdit Имя lineEdit2 Отчество  lineEdit3


Название: Re: qt+mysql
Отправлено: demal от Январь 09, 2017, 01:16
QString filtr=QString(tr("Select * From имя_таблицы where фамилия='%1' and имя='%2' and отчество='%3').arg(ui->lineEdit->text(),ui->lineEdit2->text(), ui.lineEdit3->text()));
QSqlQuery query(filtr);

как то так. только всё должно быть на английском.


Название: Re: qt+mysql
Отправлено: GraninDm от Январь 09, 2017, 09:16
Может все таки
query.prepare(...)
query.bindValue(...)


Название: Re: qt+mysql
Отправлено: demal от Январь 09, 2017, 22:33
в его случае без разницы. У него всё-равно строковые значения.


Название: Re: qt+mysql
Отправлено: Hornet от Январь 11, 2017, 08:44
QSqlQueryModel*model= new QSqlQueryModel;
QSqlQuery query;
query.exec("select nmedk,fam,im,otch,datr,datp,datw,diagn from st_ps_99 "
              "where fam = '"+ui->lineEdit->text()+"' and im ='"+ui->lineEdit_2->text()+"'"
               "and otch = '"+ui->lineEdit_3->text()+"'");

//model->setQuery(query);
model->setQuery(query);
ui->tableView->setModel(model);
Вот так работает



а так  не работает,но приложение запускается, но данные не выводит
QSqlQueryModel*model= new QSqlQueryModel;
QSqlQuery query;
query.exec("select nmedk,fam,im,otch,datr,datp,datw,diagn from st_ps_99 "
              "where fam = '"+ui->lineEdit->text()+"' and im ='"+ui->lineEdit_2->text()+"'"
               "and otch = '"+ui->lineEdit_3->text()+"'"
                  "union all"
              "select nmedk,fam,im,otch,datr,datp,datw,diagn from st_ps_00"
               "where fam = '"+ui->lineEdit->text()+"' and im ='"+ui->lineEdit_2->text()+"'"
               "and otch = '"+ui->lineEdit_3->text()+"'" );

//model->setQuery(query);
model->setQuery(query);
ui->tableView->setModel(model);




Название: Re: qt+mysql
Отправлено: Hornet от Январь 11, 2017, 09:13
Что посоветуете для решения проблемы
прошу подробно объяснить новичку.


Название: Re: qt+mysql
Отправлено: Пантер от Январь 11, 2017, 09:17
в его случае без разницы. У него всё-равно строковые значения.
Есть разница - bind нормально экранирует. И код намнооого читабельнее становится, ибо в следующем посте вообще нихрена непонятно.


Название: Re: qt+mysql
Отправлено: Пантер от Январь 11, 2017, 09:18
Что посоветуете для решения проблемы
прошу подробно объяснить новичку.
Советую переделать код с использованием bindValue, убедиться в его корректности/некорретности и уже его сюда запостить. Так же, рекомендую пользоваться тегом code для форматирования сообщений.


Название: Re: qt+mysql
Отправлено: Hornet от Январь 11, 2017, 10:00
Коректности\некоректности Джедай первый кусок кода отрабатывает четко.
но когда я делаю запросе ко второй таблице ВОТ:
QSqlQueryModel*model= new QSqlQueryModel;
QSqlQuery query;
query.exec("select nmedk,fam,im,otch,datr,datp,datw,diagn from st_ps_99 "
              "where fam = '"+ui->lineEdit->text()+"' and im ='"+ui->lineEdit_2->text()+"'"
               "and otch = '"+ui->lineEdit_3->text()+"'");
                   " union all"
 "select nmedk,fam,im,otch,datr,datp,datw,diagn from st_ps_00"
               "where fam = '"+ui->lineEdit->text()+"' and im ='"+ui->lineEdit_2->text()+"'"
               "and otch = '"+ui->lineEdit_3->text()+"'" );

//model->setQuery(query);
model->setQuery(query);
ui->tableView->setModel(model);

данные не выводятся. >:(


Название: Re: qt+mysql
Отправлено: Пантер от Январь 11, 2017, 10:07
qDebug () << query.lastError().text();
Сделай это после exec и посмотри что выдаст в консоль.


Название: Re: qt+mysql
Отправлено: Hornet от Январь 11, 2017, 11:10
Запуск C:\Users\work\Documents\build-mysql-Desktop_Qt_5_6_2_MinGW_32bit-Debug\debug\mysql.exe...
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'allselect nmedk,fam,im,otch,datr,datp,datw,diagn from st_ps_00where fam = 'ив' at line 1 QMYSQL: Unable to execute query"


Название: Re: qt+mysql
Отправлено: Пантер от Январь 11, 2017, 11:14
st_ps_00where

Ты видишь суслика?


Название: Re: qt+mysql
Отправлено: Пантер от Январь 11, 2017, 11:15
Вот поэтому пиши запросы в человеческом виде с биндами и без конкатенации.


Название: Re: qt+mysql
Отправлено: Hornet от Январь 11, 2017, 11:39
как


Название: Re: qt+mysql
Отправлено: Hornet от Январь 11, 2017, 11:42
Покажи примером мой запрос по твоей версии с переходом на другую таблицу.


Название: Re: qt+mysql
Отправлено: Пантер от Январь 11, 2017, 11:46
Код
C++ (Qt)
query.exec(" SELECT nmedk, fam, im, otch, datr, datp, datw, diagn"
          " FROM st_ps_00"
          " WHERE fam = ? AND im = ? otch = ?"
          " UNION ALL"
          " SELECT nmedk, fam, im, otch, datr, datp, datw, diagn"
          " FROM st_ps_99"
          " WHERE fam = ? AND im = ? otch = ?");
query.addBindValue(....);
.....
query.exec();
 


Название: Re: qt+mysql
Отправлено: Пантер от Январь 11, 2017, 11:50
Пробел вначале строки чтобы не потерять его вконце.


Название: Re: qt+mysql
Отправлено: demal от Январь 13, 2017, 00:54
в его случае без разницы. У него всё-равно строковые значения.
Есть разница - bind нормально экранирует. И код намнооого читабельнее становится, ибо в следующем посте вообще нихрена непонятно.
Нескромный вопрос: А что у него экранировать?
Вот то, что он просто объеденил строки, тут да, может вылезти косяк с кодировками...
А читабельность кода она относительна...


Название: Re: qt+mysql
Отправлено: GraninDm от Январь 13, 2017, 09:48
Может быть то, что в поле ввода отчество можно воткнуть значение
"and otch = '"+ui->lineEdit_3->text()+"'");
';delete from table;select'
Ну, или что-то типа этого...


Название: Re: qt+mysql
Отправлено: Hornet от Январь 15, 2017, 01:32
Спасибо всем за участие.
Все получилось.Огромное спасибо за помощь и терпение Пантеру, сделал как ты сказал запрос работает четко.