Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 6

Аварийное завершение программы после попытки выполнить SqlQuery exec()

25.05.2020, 01:48. Показов 650. Ответов 8

Студворк — интернет-сервис помощи студентам
Ниже представлен код кнопки, при попытке выполнения query->exec() программы дропается, в бд новая запись при этом не добавляется.
Вопрос : В чём может быть проблема?
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
void addform::on_next_clicked()
{
 
    QMessageBox::about(this,"",QString::number(ui->valueedit->text().toDouble(),'g',4));
    if(!flag)
    {
 
    query->prepare("INSERT INTO ? (?) VALUES('?');");
    query->bindValue(0,tn);
    flag=true;
    }
    ui->dateEdit->hide();
    ui->valueedit->show();
 
        if(buffv[temp]!="date")
        {
values[temp]=ui->valueedit->text();
query->bindValue(1,buffn[temp]);
query->bindValue(2,ui->valueedit->text());
        }
        else
        {
            query->bindValue(1,buffn[temp]);
            query->bindValue(2,ui->dateEdit->text());
 
        }
temp++;
ui->fieldname->setText(buffn[temp]);
if(buffv[temp]=="integer")
{
    ui->type->setText("Тип поля: integer | Пример заполнения: 124");
    ui->valueedit->setInputMask("");
    ui->valueedit->setValidator(new QIntValidator);
 
}
else
if(buffv[temp]=="text")
{
    ui->type->setText("Тип поля: text   | Пример заполнения: Люб0й набор_символ0в!");
    ui->valueedit->setInputMask("");
    ui->valueedit->setValidator(0);
}
else
if(buffv[temp]=="date")
{
    ui->valueedit->hide();
    ui->dateEdit->show();
    ui->type->setText("Тип поля: date   |");
}
else
if(buffv[temp]=="real")
{
    ui->type->setText("Тип поля: real | Пример заполнения: 124.2141");
    ui->valueedit->setInputMask("");
    ui->valueedit->setValidator(new QRegExpValidator(QRegExp("^([1-9][0-9]*|0)(\\.)[0-9]{4}"), this));
}
else
{
    ui->type->setText("Тип поля:"+buffv[temp]+"|");
    ui->valueedit->setInputMask("");
    ui->valueedit->setValidator(0);
}
 
    if (temp==count)
    {
        query->exec();
 
        if(!query->exec())QMessageBox::about(this,"",aquery->lastError().text()) ;
        else
        {
           QMessageBox::about(this,"Отчёт","Запись успешно добавлена!");
            delete query;
            close();
       }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.05.2020, 01:48
Ответы с готовыми решениями:

Аварийное завершение программы после команды OUT
Вывод в порт не происходит. Значения менял. Выбрасывается с ошибкой при первом же OUT. %include "io.inc" section...

Аварийное завершение программы
Программа завершается аварийно, но в файл записывает требуемую информацию. Укажите косяки. В проекте использую многобайтовую...

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

8
90 / 17 / 6
Регистрация: 21.09.2016
Сообщений: 176
25.05.2020, 02:05
А Вы точно уверены, что прога падает из-за query->exec() ?
Обычно из-за неправильного запроса получается сообщение от драйвера БД, что он не корректен.
Скорее всего, по моему мнению, Вы где-то в массивах "buffv[temp]" вылазите за его размер, вставляете туда не инициализированный temp... в прочем много может быть много разных версий.

Примитивно попробуйте прописать qDebug в пикантных местах чтобы определить где же в этом методе проблема.
1
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 6
25.05.2020, 02:29  [ТС]
тест и его результаты на скрине.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
 if (temp==count)
    { qDebug()<<temp;
        query->exec();
 
        if(!query->exec())QMessageBox::about(this,"",aquery->lastError().text()) ;
        else
        {
           QMessageBox::about(this,"Отчёт","Запись успешно добавлена!");
            delete query;
            close();
       }
    }
А есть шанс, что в таком варианте передачи переменных в запрос проблема?:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    if(!flag)
    {
 
    query->prepare("INSERT INTO ? (?) VALUES('?');");
    query->bindValue(0,tn);
    flag=true;
    }
    ui->dateEdit->hide();
    ui->valueedit->show();
{
   if(buffv[temp]!="date")
   {
       values[temp]=ui->valueedit->text();
       query->bindValue(1,buffn[temp]);
       query->bindValue(2,ui->valueedit->text());
   }
    else
    {
        query->bindValue(1,buffn[temp]);
        query->bindValue(2,ui->dateEdit->text());
    }
}
Миниатюры
Аварийное завершение программы после попытки выполнить SqlQuery exec()  
0
90 / 17 / 6
Регистрация: 21.09.2016
Сообщений: 176
25.05.2020, 02:31
а что за БД используется?
0
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 6
25.05.2020, 02:37  [ТС]
postgre

Добавлено через 2 минуты
вызов lasterror с неинициализированного объекта aquery, для того чтобы узнать почему не выполняет query - это сильно. Только форум замусорил(((
0
90 / 17 / 6
Регистрация: 21.09.2016
Сообщений: 176
25.05.2020, 02:38
Ну в общем в правильную сторону подсказал)) все же что-то было не инициализировано.

По поводу запросов, я предпочитаю делать QString и передавать его в exec:

C++ (Qt)
1
2
QString command = QString("INSERT INTO %1 (%2) VALUES('%3');").arg(table_name).arg(col_name).arg(value);
query.exec(command);
Потому что сталкивался ранее с некорректной работой qt биндов для postgresql
1
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 6
25.05.2020, 02:48  [ТС]
А вот за это низкий поклон)
0
 Аватар для Annemesski
2673 / 1335 / 480
Регистрация: 08.11.2016
Сообщений: 3,690
25.05.2020, 05:24
stehsamihglubin, подозрителные строчки №№ 66, 72
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (temp==count)
{
    qDebug() << temp;
    query->exec(); // выполнили запрос и далее
 
    if(!query->exec()) // выполняете его повторно, зачем?
        QMessageBox::about(this, "", aquery->lastError().text()) ;
    else
    {
        QMessageBox::about(this,"Отчёт","Запись успешно добавлена!");
        delete query; // что за ... delete здесь? перенесите его в деструктор класса addform
        close();
    }
}
0
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 6
25.05.2020, 06:23  [ТС]
По поводу повторного вызова запроса, я это увидел, исправил, по поводу delete, благодарю за подсказку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.05.2020, 06:23
Помогаю со студенческими работами здесь

Аварийное завершение программы
Привет всем! Сразу же извиняюсь, если попал не в тот раздел форума. Проблема в следующем. Имеется простая однопотоковая консольная...

Аварийное завершение программы
Народ пишу клас для логирования работы приложения. Хотелось бы отслеживать и записывать сообщения об аварийном завершении приложения. Да...

Аварийное завершение программы
В общем, благодаря советам здешних форумчан, я таки осилил небольшую программку на малознакомом мне Си (я как то больше шарп и делфи),...

Аварийное завершение программы
Проблема такого характера: есть программа, которая запускается без проблем, нормально работает некоторое время, а потом аварийно...

Аварийное завершение программы
#include &quot;B.h&quot; #include &quot;D1.h&quot; #include &quot;D2.h&quot; #include &lt;iostream&gt; #include &lt;typeinfo&gt; using namespace std; class B ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru