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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: qt+mysql  (Прочитано 13284 раз)
Hornet
Гость
« : Январь 06, 2017, 20:20 »

Здравствуйте.
Раньше пользовался скриптом для поиска данных в базе, но решил сделать графическую форму для поиска

 коннект работает простой запрос при нажатии кнопки тоже работает "Вывод данных".
Но сталкнулся с такой проблемой в поле lineEdit..1 ...2...3 нужно заполнить данные и она должна проитись по таблицам
и наити их, и вывести что нашла.
как sql код совместить с тем что щас есть.Ив sql коде подставить значения lineedit..2.....3
Записан
demal
Чайник
*
Offline Offline

Сообщений: 53


Просмотр профиля
« Ответ #1 : Январь 08, 2017, 01:42 »

QString filtr= QString(tr("Select * From блабла where ххх=%1").arg(ui->lineEdit1->text()));
и так до  9 аргументов.
Записан
Hornet
Гость
« Ответ #2 : Январь 08, 2017, 22:16 »

Можно по подробней попробывал не получилось.
Мне в условие where надо подставить Фамилия linerdit Имя lineEdit2 Отчество  lineEdit3
Записан
demal
Чайник
*
Offline Offline

Сообщений: 53


Просмотр профиля
« Ответ #3 : Январь 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);

как то так. только всё должно быть на английском.
Записан
GraninDm
Гость
« Ответ #4 : Январь 09, 2017, 09:16 »

Может все таки
query.prepare(...)
query.bindValue(...)
Записан
demal
Чайник
*
Offline Offline

Сообщений: 53


Просмотр профиля
« Ответ #5 : Январь 09, 2017, 22:33 »

в его случае без разницы. У него всё-равно строковые значения.
Записан
Hornet
Гость
« Ответ #6 : Январь 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);


Записан
Hornet
Гость
« Ответ #7 : Январь 11, 2017, 09:13 »

Что посоветуете для решения проблемы
прошу подробно объяснить новичку.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Январь 11, 2017, 09:17 »

в его случае без разницы. У него всё-равно строковые значения.
Есть разница - bind нормально экранирует. И код намнооого читабельнее становится, ибо в следующем посте вообще нихрена непонятно.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Январь 11, 2017, 09:18 »

Что посоветуете для решения проблемы
прошу подробно объяснить новичку.
Советую переделать код с использованием bindValue, убедиться в его корректности/некорретности и уже его сюда запостить. Так же, рекомендую пользоваться тегом code для форматирования сообщений.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Hornet
Гость
« Ответ #10 : Январь 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);

данные не выводятся. Злой
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Январь 11, 2017, 10:07 »

qDebug () << query.lastError().text();
Сделай это после exec и посмотри что выдаст в консоль.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Hornet
Гость
« Ответ #12 : Январь 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"
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #13 : Январь 11, 2017, 11:14 »

st_ps_00where

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

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #14 : Январь 11, 2017, 11:15 »

Вот поэтому пиши запросы в человеческом виде с биндами и без конкатенации.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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