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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Подключение к Mysql  (Прочитано 5968 раз)
useruser
Гость
« : Октябрь 01, 2013, 20:00 »

Хочу выполнить запрос на удалённой базе

Код:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "mydb");
db.setPort(3306);
db.setHostName("79.222.60.241");
db.setDatabaseName("base");
db.setUserName("user");
db.setPassword("123");
bool ok = db.open();

if(ok==true)
ui->label_3->setText("Соединение с базой установлено");
if(ok==false)
ui->label_3->setText("Ошибка подключения к БД");

QSqlQuery query;

query.exec("INSERT INTO records (record,time) VALUES ('1','1');");

Пишет ошибку QSqlQuery::exec: database not open. Несмотря на то, что "Соединение с базой установлено" (ok==true)
Запрос не выполняется - в базе-таблице не появляется запись. Удалённый доступ к бд открыт.
В чём тут ошибка?
Записан
Bepec
Гость
« Ответ #1 : Октябрь 01, 2013, 20:03 »

А попробовать  выполнить запрос от имени db.exec() пробовали?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Октябрь 01, 2013, 20:13 »

Цитировать
QSqlDatabase QSqlDatabase::addDatabase ( const QString & type, const QString & connectionName = QLatin1String( defaultConnection ) )
...
If connectionName is not specified, the new connection becomes the default connection

Цитировать
QSqlQuery::QSqlQuery ( const QString & query = QString(), QSqlDatabase db = QSqlDatabase() )
...
Constructs a QSqlQuery object using the SQL query and the database db. If db is not specified, or is invalid, the application's default database is used

Теперь проецируем это внимательно на код

Код
C++ (Qt)
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "mydb");
...
QSqlQuery query;
Записан
useruser
Гость
« Ответ #3 : Октябрь 01, 2013, 20:41 »

Bepec - нет не пробовал. Попробую, но боюсь это не поможет. Тут что-то не так с подключением к БД.

Alex -я новичек и мало что понимаю.
Делал всё по статье http://habrahabr.ru/post/51650/
Часть ошибок исправил сам. Как исправить эту не знаю.
Так что скажите проще, что я не так сделал?
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Октябрь 01, 2013, 20:45 »

Уберите имя соединения из параметров addDatabase: mydb
Или добавьте его в параметры конструктора QSqlQuery.
« Последнее редактирование: Октябрь 01, 2013, 21:00 от Old » Записан
useruser
Гость
« Ответ #5 : Октябрь 01, 2013, 21:06 »

Old Большое cпасибо. Заработало. )
Ну и в догонку ещё вопрос - не подскажете по синтаксису, как вставить в SQL запрос переменные?
query.exec("INSERT INTO records (record,time) VALUES ('myvar1','myvar2');
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Октябрь 01, 2013, 22:08 »

Код:
query.exec(QString("INSERT INTO records (record,time) VALUES ('%1','%2')")
                           .arg(myvar1)
                           .arg(myvar2));
Записан

malor
Гость
« Ответ #7 : Октябрь 09, 2013, 15:38 »

Делал всё по статье http://habrahabr.ru/post/51650/
Часть ошибок исправил сам.

Какие там ещё ошибки? Кроме как с регистром букв (см. топик. error: 'QsqlDatabase' has not been declared).
Записан
carrygun
Гость
« Ответ #8 : Октябрь 10, 2013, 08:35 »

Код:
query.exec(QString("INSERT INTO records (record,time) VALUES ('%1','%2')")
                           .arg(myvar1)
                           .arg(myvar2));

Это, кстати, не лучший вариант. Помню год назад натыкался на определенные проблемы связанные с таким подходом. Лучше использовать bindValue() у QSqlQuery. Да и типы там автоматически определяются, не нужно писать всякие кавычки потом.

UPD: вспомнил в чем была проблема, выглядело примерно так:
Код
C++ (Qt)
QString var1("sur%2prise");
QString var2("text");
QString var3("some string %1 %2").arg(var1).arg(var2);
 
Что-то в таком духе.
« Последнее редактирование: Октябрь 10, 2013, 08:46 от carrygun » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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