Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
lss
932 / 861 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
1

Ошибка при попытке добавления записи в базу данных (MySQL)

18.02.2014, 22:47. Просмотров 2091. Ответов 11
Метки нет (Все метки)

Qt 4.8.5, MySQL Community Server (mysql-5.5.23-win32.msi). Собрал драйвер под 10 студию (gmake, nmake). Данные с базы получаю, но добавить (INSERT) не получается. Разными способами пытаюсь, но результат один: "Unable to make insert opeation". В командной строке данные в базу добавляются.
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <QtGui>
#include <QtSql>
#include <cstdlib>
#include <iostream>
using namespace std;
 
int main(int argc, char** argv)
{
    setlocale(0, "");
 
    QCoreApplication app(argc, argv);
 
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setDatabaseName("addressbook");
    db.setUserName("root");
    db.setPassword("123"); 
    db.setConnectOptions();
    if (!db.open())
    {
        qDebug() << "Failed to connect to root mysql admin";
        system("pause");
        app.quit();
    }
    else 
    {
        qDebug() << "OK!";
       
        QSqlQuery query;
        QString   str;
 
        if(db.tables().contains("test") )
        {
            cout  << "Таблица уже создана" << endl;
        }
        else
        {
            str  = "CREATE TABLE test ( "
                                 "number INTEGER PRIMARY KEY NOT NULL, "
                                 "name   VARCHAR(15), "
                                 "phone  VARCHAR(12), "
                                 "email  VARCHAR(15) "
                             ");";
 
            if (!query.exec(str)) 
            {
                qDebug() << "Unable to create a table";
            }
        }
////////////// 1        
       
        query.prepare("INSERT INTO test (number, name, phone, email) "
              "VALUES( ?, ?, ?, ?)");
 
        query.addBindValue(1);
        query.addBindValue("Piggy");
        query.addBindValue("+49 631322187");
        query.addBindValue("piggy@mega.de");
 
        if (query.numRowsAffected() == -1)
            cout << "No!" << endl;
 
        query.exec();
////////////////// 2        
        
        str = QString("INSERT INTO test VALUES(%1, '%2', '%3', '%4');")
                      .arg("1")
                      .arg("Piggy")
                      .arg("+49 631322187")
                      .arg("piggy@mega.de");
 
 
        if (!query.exec(str)) 
        {
            qDebug() << "Unable to make insert opeation";
        }
 ////////////////// 3       
        
        str = QString("INSERT INTO test (number, name, phone, email) "
              "VALUES (1, 'Piggy', '+49 631322187', 'piggy@mega.de');");
        
        if (!query.exec(str)) 
        {
            qDebug() << "Unable to make insert operation";
        }
 
  //////////////////////////////////////////////////////////////////////////
        
        if (!query.exec("SELECT * FROM pet;")) 
        {
            qDebug() << "Unable to execute query - exiting";
            return 1;
        }
 
        //Reading of the data
        QSqlRecord rec     = query.record();
        
        QString    strname;
        QString    strowner;
        QString    strspecies;
        QString    strsex;
        QString    strbirth;
        QString    strdeath;
 
        while (query.next()) 
        {
            strname    = query.value(rec.indexOf("name")).   toString();
            strowner   = query.value(rec.indexOf("owner")).  toString();
            strspecies = query.value(rec.indexOf("species")).toString();
            strsex     = query.value(rec.indexOf("sex")).    toString();
            strbirth   = query.value(rec.indexOf("birth")).  toString();
            strdeath   = query.value(rec.indexOf("death")).  toString();
    
            qDebug() << strname    << " " << strowner << " " 
                     << strspecies << " " << strsex   << ' ' 
                     << strbirth   << ' ' << strdeath << endl;
        }
        
        system("pause");
        return 0;
    }
}
Вывод на консоль:
OK!
Таблица уже создана
No!
Unable to make insert opeation
Unable to make insert operation
"Puffball" "Diane" "hamster" "f" "1999-03-30" ""
В чём может быть проблема и как исправить?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2014, 22:47
Ответы с готовыми решениями:

Ошибка добавления в базу данных записи, неверный id
такая вот проблема: The changes you requested to the table were not successful because they would...

Ошибка при попытке добавления данных в БД через AJAX
Хочу добавить функцию добавления объявления в Избранное. &lt;div class='adv'...

Пытаюсь добавить записи в базу данных.После добавления 5-7 записей вылетает ошибка.
Уважаемые коллеги. Проблема следующая. Пытаюсь добавить записи в базу данных.После добавления 5-7...

В чём ошибка добавления данных в базу при использовании identity?
Делаю регистрацию пользователей на сайте с помощью Identity.Данные из формы отправляются, а после...

11
RazrFalcon
1393 / 1250 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
19.02.2014, 01:08 2
C++ (Qt)
1
2
3
query.exec(QString("INSERT INTO %1 (%2, %3, %4, %5) VALUES(\"%6\", \"%7\", \"%8\", \"%9\");")
            .arg(test, "number", "name", "phone", "email", "1", "Piggy", "+49 631322187", "piggy@mega.de"));
qDebug() << query.lastError()
2
alsav22
5465 / 4860 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2014, 01:16 3
test не определяет.
0
lss
932 / 861 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
19.02.2014, 01:27  [ТС] 4
То же самое, test подчёркивает. Попробовал ещё с QSQLITE, та же история, вставка в базу, с моим кодом, не работает. Не пойму, в чём дело...
0
RazrFalcon
1393 / 1250 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
19.02.2014, 01:39 5
test в кавычки возьмите, это же просто опечатка... можно было догадаться
0
lss
932 / 861 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
19.02.2014, 01:43  [ТС] 6
Цитата Сообщение от RazrFalcon Посмотреть сообщение
можно было догадаться
Догадаться-то я догадался, только легче не стало. Вот такое выдаёт на консоль:
QSqlError(1406, "QMYSQL: Unable to execute query", "Data too long for column 'phone' at row 1")
0
RazrFalcon
1393 / 1250 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
19.02.2014, 01:55 7
С этого и нужно было начинать...
C++ (Qt)
1
phone  VARCHAR(12)
C++ (Qt)
1
qdebug() << QString("+49 631322187").size();
Надеюсь намек понятен.
1
lss
932 / 861 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
19.02.2014, 02:06  [ТС] 8
Цитата Сообщение от RazrFalcon Посмотреть сообщение
С этого и нужно было начинать...
До этого не доходило. Намёк понятен. Кстати, пример кода из Шлее. Заработало. Почему мой (хотя не мой, а всё из литературы) не работает? Там что не так?
0
Миниатюры
Ошибка при попытке добавления записи в базу данных (MySQL)  
RazrFalcon
1393 / 1250 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
19.02.2014, 02:08 9
От опечаток ни кто не защищен.
VARCHAR может вмещать разное количество символов в зависимости от кодировки, если не ошибаюсь.
1
lss
932 / 861 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
19.02.2014, 02:22  [ТС] 10
Цитата Сообщение от RazrFalcon Посмотреть сообщение
VARCHAR может вмещать разное количество символов в зависимости от кодировки, если не ошибаюсь.
Если бы тут были русские символы, тогда да. Мой код тоже заработал. Хорошо, что научили ошибку выводить (query.lastError()), сделал и проблема прояснилась. Если правильно понял, то там первый ключ (1) повторялся, из-за этого и не хотело вставляться.
QSqlError(1062, "QMYSQL3: Unable to execute statement", "Duplicate entry '1' for key 'PRIMARY'")
0
donatello23
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 13
19.02.2014, 08:26 11
В тоге пришли к тому что просто не правильно была создана таблица.)
0
lss
932 / 861 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
19.02.2014, 14:33  [ТС] 12
Код с примером из книги Шлее (к главе 42(chapter42, SQL, main.cpp) оказался неверным (размер ширины столбца таблицы == 12, а размер строки, для вставки == 14) . Плюс, мое плохое знание Qt. Если бы сделал вывод текста ошибки, то догадался бы, что строка слишком длинная для таблицы.
Плюс, никогда не имел дела с базами данных. Пытался вставить запись с номером, уже имеющимся в базе. И опять: если бы сделал вывод текста ошибки, то догадался бы об этом, а так два дня промучился, один день со сборкой драйвера, второй - с вставкой записи в таблицу
0
19.02.2014, 14:33
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2014, 14:33

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

DataGridView, "ошибка диапазона" при попытке добавления данных
Работаю в Windows Forms. Создаю datagridview, программно описываю его, пытаюсь добавить в него...

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

Кодировка текста данных для добавления в базу MySQL
Добрый день! Пытаюсь из Powershell вставлять данные в MySQL установленный на Ubuntu Server. Беда в...

Ошибка при добавлении записи в базу данных
При добавлении записи в базу возникает ошибка. Помогите разобраться. const String ConnStr =...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.