Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 457

Qt приложение как mysql клиент

04.01.2016, 17:05. Показов 5794. Ответов 73
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пишу не совсем с нуля, читаю доки и примеры, найденные на просторах инета\рунета.

пока возникли два вопроса:
1 вопрос:
имеется QTablewidget tw
на него привязан код в mainwindow.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow){
    ui->setupUi(this);
    ui->tw->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
    //Подключение к серверу БД и авторизация
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("192.168.7.1");
    db.setPort(3306);
    db.setDatabaseName("BD_BP");
    db.setUserName("userbp");
    db.setPassword("23165764aq23e");
    //Если подключиться удалось...
    if (db.open()){
        for (int i=0; i<2; i++) ui->tw->insertColumn(i);
        QSqlQuery q;
        q.exec("select login, passwd from `User`"); q.first();
        while (q.next()){
            ui->tw->insertRow(ui->tw->rowCount());
            for (int i=0; i<2; i++){
                QTableWidgetItem * item = new QTableWidgetItem(q.value(i).toString());
                ui->tw->setItem(ui->tw->rowCount()-1,i,item);
            }
        }
    }else{ //Если нет - выводим сообщение об ошибке
        ui->tw->insertRow(0); ui->tw->insertColumn(0);
        QTableWidgetItem * item = new QTableWidgetItem("Error: "+db.lastError().text());
        ui->tw->setItem(0,0,item);
    }
}
MainWindow::~MainWindow(){
    delete ui;
}
все работает, кроме отображения первого элемента в таблице. в чем может быть проблема?
какие параметры тока не менял, либо не отображает ничего, либо отображает 8 пустых строк. а в базе 9 строк(от 0 до 8)

2 вопрос:
тут пара ньюансов:
есть основное окно MainWindow где происходит(будет происходить вся) работа.

- сделать чтобы при открытии программы, сначала запрашивало диалог\запрос авторизации для ввода логина\пароля.
- или сделать кнопку в окне MainWindow где при открытии активна только она, при нажатии которой выходит окно диалога с запросом логина\пароля. и если верна авторизация то активировать все остальное в окне...

как тут удобнее, можете посоветовать в плане реализации кода?
Миниатюры
Qt приложение как mysql клиент  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.01.2016, 17:05
Ответы с готовыми решениями:

Клиент серверное приложение ADO.net - mysql
Доброго времени суток! не знаю в какую тему написать - вопрос такой у меня приложение на c# обменивается с мускл данными в utf8 в базе...

Клиент-Серверное приложение. Как сделать, чтобы сервер сам отправлял сообщения на клиент
Добрый день всем. Проблема заключается в следующем: Есть клиент-серверное приложение, хочу реализовать своего рода защиту, чтобы при...

Клиент-серверное приложение: как определить, что сервер/клиент не отвечает в течении определенного времени
Пишу клиент-серверное приложение. Использую TCPListener и TCPClient. Вопрос: как определить что сервер(клиент) не отвечает в течении...

73
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 457
13.03.2016, 15:41  [ТС]
Студворк — интернет-сервис помощи студентам
Доброго вечера всем.

Давно не занимался проектом... по некоторым причинам связанными с работой.

за время отсутствия родня поработала за ноутом, переустановил все... установил mingw\qt\qtcreator правда по другому пути.

теперь при сборке проекта пишет:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
debug/dialoghelp.o: In function `DialogHelp':
C:\test\window-build-desktop-Qt_4_8_4__Qt_________/../window/dialoghelp.cpp:6: undefined reference to `vtable for DialogHelp'
C:\test\window-build-desktop-Qt_4_8_4__Qt_________/../window/dialoghelp.cpp:6: undefined reference to `vtable for DialogHelp'
C:\test\window-build-desktop-Qt_4_8_4__Qt_________/../window/dialoghelp.cpp:6: undefined reference to `vtable for DialogHelp'
C:\test\window-build-desktop-Qt_4_8_4__Qt_________/../window/dialoghelp.cpp:6: undefined reference to `vtable for DialogHelp'
debug/dialoghelp.o: In function `~DialogHelp':
C:\test\window-build-desktop-Qt_4_8_4__Qt_________/../window/dialoghelp.cpp:11: undefined reference to `vtable for DialogHelp'
debug/dialoghelp.o:C:\test\window-build-desktop-Qt_4_8_4__Qt_________/../window/dialoghelp.cpp:11: more undefined references to `vtable for DialogHelp' follow
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\window.exe] Error 1
mingw32-make: *** [debug] Error 2
22:12:23: Процесс «D:\Distr\vip\prog\Mingw\bin\mingw32-make.exe» завершился с кодом 2.
Возникла ошибка при сборке/установке проекта window (цель: Desktop)
Во время выполнения этапа «Сборка»
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
DialogHelp::DialogHelp(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DialogHelp)
{
    ui->setupUi(this);
}
 
DialogHelp::~DialogHelp()
{
    delete ui;
}
проект не менялся, при отъезде запаковался и сегодня распаковался и тут на тебе. облом....

p.s. а mingw можно ставить в каталог отличный от умолчания?

Добавлено через 13 часов 33 минуты
хз что было, спасла повторная переустановка qt.

Добавлено через 2 часа 50 минут
Доброго дня всем.

Можете подсказать в форматировании и отображении date из базы и обратно.

в базе есть поле date_z c параметром date

отображается оно правильно, в виде dd.MM.yyyy
а вот заносится в виде yyyy.MM.dd. можно как нибудь переделать чтобы оно везде одинаково было? в формате dd.MM.yyyy

сейчас в базу вносится в виде стоки
C++ (Qt)
1
ui->lineEdit_3->setText(Dt.toString("yyyy.MM.dd"));
если вносить в виде dd.MM.yyyy получается дата отображается как yy день MM месяц и dd год
0
693 / 465 / 162
Регистрация: 01.10.2015
Сообщений: 1,274
13.03.2016, 16:18
Цитата Сообщение от Серый_Ветер Посмотреть сообщение
а вот заносится в виде yyyy.MM.dd.
MySQL хранит DateTime в формате ISO 8601, сперва год, потом месяц и день, если средствами Qt дата отображается в "правильном" для вас (читай, удобном для восприятия) формате дд.ММ.ГГГГ, то какая вам разница, как дата хранится во внутреннем представлении MySQL?
0
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 457
13.03.2016, 17:45  [ТС]
я неправильно выразился.

имеем qtableview.
там из базы достается колонка "date" формата date. отображается как dd.MM.yyyy - тут вопросов нет.
имеем в другой форме несколько lineedit, один из которых принимает значение:
C++ (Qt)
1
ui->lineEdit_3->setText(Dt.toString("yyyy.MM.dd"));
в принципе все работает, замечания просто в том, что глаз видя в таблице один формат, начинает вбивать(иногда надо вручную вбить дату(из 100% 0,05% - надо набить вручную)) подобный таблице, а в lineedit все наоборот... в итоге дата в базу пишется неверной.
0
693 / 465 / 162
Регистрация: 01.10.2015
Сообщений: 1,274
13.03.2016, 17:58
Цитата Сообщение от Серый_Ветер Посмотреть сообщение
имеем в другой форме несколько lineedit,
почему бы тогда не использовать QDateEdit вместо QLineEdit, у него есть свойство displayFormat, определяющее формат, в котором отображается дата? Оно по умолчанию "dd.MM.yyyy"
1
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 457
13.03.2016, 20:26  [ТС]
Спасибо, переделал. теперь отображается как dd.mm.yyyy а записывается как yyyy.mm.dd
буду дальше кряхтеть...

Добавлено через 1 час 47 минут
а как осуществлять запросы в QSqlTableModel в которых есть JOIN
SQL
1
2
3
SELECT _tabl1.id_1, tabl2.name_2
FROM _tabl1
INNER JOIN tabl2 ON tabl2.id_12 = _tabl1.id_1
Опять всю прогу переделывать так как не умеет оно?
0
693 / 465 / 162
Регистрация: 01.10.2015
Сообщений: 1,274
13.03.2016, 20:30
создать в базе данных представление на основе этого запроса? и уже из этой вьюшки забирать данные
0
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 457
13.03.2016, 20:52  [ТС]
на запрос вида:
SQL
1
INNER JOIN USER ON USER.id_vid_radio = _zreal.id_vid_bp AND date_z >= (CURDATE()-1) AND date_z <= CURDATE() ORDER BY date_z ASC, time_z ASC
qt вываливается с ошибкой:
Запускается C:\test\window-build-desktop-Qt_4_8_4__Dymanic_________\debug\window. exe...
ASSERT: "idx >= 0 && idx < s" in file ../../include/QtCore/../../src/corelib/tools/qvarlengtharray.h, line 110
C:\test\window-build-desktop-Qt_4_8_4__Dymanic_________\debug\window. exe завершился с кодом 3
сам запрос вручную проходит и отображает
SQL
1
2
3
4
5
6
SELECT *
FROM _zreal 
INNER JOIN USER ON USER.id_vid_radio = _zreal.id_vid_bp 
AND date_z >= (CURDATE()-1) 
AND date_z <= CURDATE() 
ORDER BY date_z ASC, time_z ASC
0
693 / 465 / 162
Регистрация: 01.10.2015
Сообщений: 1,274
13.03.2016, 20:58
само представление в базе создали?
0
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 457
13.03.2016, 21:18  [ТС]
почитал про них... в своей то создать смогу... а вот в рабочей.
в общем пока буду без этого. там посмотрим.
0
693 / 465 / 162
Регистрация: 01.10.2015
Сообщений: 1,274
14.03.2016, 01:07
Странная у вас ситуация, чаще предоставляют доступ для пользователя к разнообразным представлениям в базе, но не к самим базовым таблицам...
0
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 457
14.03.2016, 22:05  [ТС]
хе, про ситуацию у нас я промолчу в ЛС вам известно где я работаю))) там и не такое бывает.

такс, вечера всем.

представление создал в БД где это все будет работать. вопросов нет. вернее один отпал уже. даже два.

теперь другие вопросы.

qtableview - по умолчанию редактирование разрешено всех ячеек во всех столбцах.
ставим параметр
C++ (Qt)
1
this->ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
редактирование становится невозможным.
можете подсказать как сделать чтобы всю таблицу нельзя было редактировать, кроме нескольких(указанных) столбцов?
0
693 / 465 / 162
Регистрация: 01.10.2015
Сообщений: 1,274
14.03.2016, 22:20
Цитата Сообщение от Серый_Ветер Посмотреть сообщение
можете подсказать как сделать чтобы всю таблицу нельзя было редактировать, кроме нескольких(указанных) столбцов?
пишите свою модель для данных, книги Земскова, того же Шлее, там есть простые примеры реализации собственных моделей
0
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 457
16.03.2016, 23:39  [ТС]
Доброго вечера.

Можете подсказать, как запустить плагин qmysql* под win 7 x64.
программа со скомпиленным на хр плагином запускается, при старте пишет:
C++ (Qt)
1
2
3
4
5
6
FTH: (15096): *** Fault tolerant heap shim applied to current process. This is usually due to previous crashes. ***
non-service application, do extended console check
Has not console, skip locks
STARTING DLL
STARTING WSPStartup
CreateRPCClient startCreateRPCClient start
далее при коннекте и обращении к базе:
C++ (Qt)
1
2
3
4
5
6
SqlDatabasePrivate::database: unable to open database: "Access denied for user 'userbp'@'usersmashine' (using password: YES) QMYSQL: Unable to connect" 
QSqlQuery::exec: database not open
QSqlQuery::value: not positioned on a valid record
QSqlQuery::value: not positioned on a valid record
QSqlQuery::value: not positioned on a valid record
QSqlDatabasePrivate::database: unable to open database: "Access denied for user 'userbp'@'BP52' (using password: YES) QMYSQL: Unable to connect"
при попытке скомпилировать плагин mysql от версии x64 - одни ошибки при команде mingw-make32. ошибки скопировать забыл, простите.

сборка программы со статическим mysql не выходит, пишет в консоль:
C++ (Qt)
1
2
3
4
5
6
7
Запускается D:\Temp\test\window-build-desktop-Qt_4_8_4__QtStatic________\release\window.exe...
Программа неожиданно завершилась.
D:\Temp\test\window-build-desktop-Qt_4_8_4__QtStatic________\release\window.exe завершился с кодом -1073741515
 
Запускается D:\Temp\test\window-build-desktop-Qt_4_8_4__QtStatic_________\debug\window.exe...
Программа неожиданно завершилась.
D:\Temp\test\window-build-desktop-Qt_4_8_4__QtStatic_________\debug\window.exe завершился с кодом -1073741515
по поводу
FTH: (55572): *** Fault tolerant heap shim applied to current process. This is usually due to previous crashes. ***
non-service application, do extended console check
Has not console, skip locks
уже начитался, завтра попробую отключить.
но компилироваться думаю все равно будет с ошибкой, так как данная надпись выскакивает даже при компилировании простого окна с кнопкой "закрыть окно".
0
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 457
18.03.2016, 00:52  [ТС]
в общем qt не шибко разноплатформенная)
чтоб заработала на нужной машине пришлось дома семерку накатывать...
то что установлена на хр на семерке не работает.

Добавлено через 23 секунды
буду теперь дальше работать...
0
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
18.03.2016, 10:53
Серый_Ветер, Qt прекрасно работает со всеми актуальными версиями винды. Я даже умудрялся запускать на win2000 то, что шло и на семерке. Правда приходилось чуть Qt "подпилить") На xp все пашет и без этого. Возможно вы что-то не то делали. 4.7.4 Например, так-же прекрасно запустилась на десятке.
0
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 457
18.03.2016, 21:03  [ТС]
Цитата Сообщение от Amok Посмотреть сообщение
Qt прекрасно работает
работает. не спорю, если устанавливать далее-далее-далее-ок. - запускается, работает, компилит, открывает.
одно большое НО. устанавливать нельзя от слова совсем нельзя. никак нельзя.
пришлось дома сделать образ своей хр, установить win 7 x64, туда установить Qt, заархивировать, восстановить образ и архив распаковать уже на нужной машине. вот таким образом все работает как часы.
Цитата Сообщение от Amok Посмотреть сообщение
Возможно вы что-то не то делали.
не оспариваю этот факт.
0
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 457
27.03.2016, 23:24  [ТС]
столкнулся с такой проблемой:
программа работает только на той машине где была скомпилена.

проблема заключена в libmysql.dll
то есть список в папке:
file.exe
Qsqld4.dll
qguid4.dll
qcored4.dll
mingw10.dll
libgcc_s_dw2-1.dll
и
libmysql.dll
на машине где все было скомпилено, специально удалил отовсюду эту библиотеку, положил только рядом с программой.
программа работает.

иду на другую машину, запускаю, программа ругается на этапе соединения с mysql
меняю libmysql на 32\64 разрядную везде - на родной машине программа также начинает ругаться на соединение.

где можно достать рабочую версию? или я неверное собрал модули в qt?

Добавлено через 8 минут
если отключить проверку, программа работает(скомпилена правильно) без коннекта к базе.
то есть таки файлы я никакие не забыл положить, проблема в этой библиотеке((

Добавлено через 21 час 24 минуты
перепроверил все.
так и не понял, как эта библиотека может на одних машинах рабоать, на других нет..
0
693 / 465 / 162
Регистрация: 01.10.2015
Сообщений: 1,274
27.03.2016, 23:36
Цитата Сообщение от Серый_Ветер Посмотреть сообщение
программа ругается на этапе соединения с mysql
скрин "ругани" был бы весьма к месту...

Добавлено через 4 минуты
Цитата Сообщение от Серый_Ветер Посмотреть сообщение
то есть список в папке:
file.exe
Qsqld4.dll
qguid4.dll
qcored4.dll
mingw10.dll
libgcc_s_dw2-1.dll
и
libmysql.dll
вы не упоминаете о наличии в каталоге сборки плагина /plugins/sqldrivers/qsqlmysql.dll
0
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 457
29.03.2016, 21:55  [ТС]
млин, ошибка в пути была в одной букве...

Добавлено через 21 час 51 минуту
такой вопрос...
в можно ли в одном стоблце qtableview отобразить два значения из базы через какой либо знак \t \r \n?

например запрос делается такой:
select name1, name2, name3, name4, name5 from....

а в таблице отобразить как:
столбец 1 - name2
столбец 2 - поля name2 и name3 через enter(символ каретки)
столбец 3 - name4
столбец 4 - name5

в примерах не нашел. но понадобилось( не хотят чтобы в двух колонках было...
0
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
30.03.2016, 10:44
http://dev.mysql.com/doc/refma... ion_concat
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.03.2016, 10:44

Как подключать приложение к MySQL - свое подключение для каждой формы, или одно на всё приложение?
Вопрос: как правильно организовать подключение к базе MySQL для приложения, которое обращается к разным таблицам одной базы - при каждом...

Клиент-серверное приложение. Сервер - ПК, клиент - телефон (Android)
Здравствуйте, решил для обучения написать программу для выключения ПК с телефона, используя компонент TIdTCPServer. Подскажите, как...

Как установить клиент и сервер MySQL?
При установке mysql на VPS-сервер (Ubuntu 12.04) возникла проблема. sudo apt-get install mysql-server mysql-client Selecting...

Как написать приложение клиент-сервер?
как написать приложение типа клиент-сервер на Java, поставил Java(TM) Web Services Developer Pack 1.1, в котором есть сервер TomCat....

Как организовать клиент-серверное приложение
Делаю лабораторную: необходимо написать три приложения на с#, два сервера (ServerInput и ServerProcess) и клиент-приложение (ClientOutput)....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru