Process finished with exit code -1073740791 (0xC0000409)

Kim Jon

Новичок
Пользователь
Авг 1, 2021
22
2
3
1.Windows 10
2. Указать версию Python 3.13
3.Библиотека PyQT6
Приветствую Друзья!!!
Объясните пожалуйста мне, один нюанс в табличной модели. Я уже который день голову ломаю
Начну с самого начала вернувшись обратно к своей любимой теме, "Создание СУБД"..... Изучаю я по книге: Прохорёнок Н.А. Дронов В.А. - Python 3 и PyQt6 Разработка приложений.
там указан листинг:
Код:
from PyQt6 import QtCore, QtGui, QtWidgets, QtSql
import sys
def addRecord():
    if stm.value("category") == []:
        # Вставляем пустую запись, которую пользователь сможет ввести нужные данные
        stm.insertRecord(stm.rowCount())


def deleteRecord():
    # Удаляем запись из модели
    stm.removeRecord(tv.currentIndex().row())
    stm.select


app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.setWindowTitle("Добавление и удаление записи")
# Устанавливаем соединение с базой данных
con = QtSql.QSqlDatabase.addDatabase("QSQLITE")
con.setDatabaseName("data.sqlite")
con.open()
# Создаем модель
stm = QtSql.QSqlTableModel(parent=window)
stm.setTable("category")
stm.sort(1, QtCore.Qt.SortOrder.AscendingOrder)
stm.select()
# Задает заголовки
stm.setHeaderData(0, QtCore.Qt.Orientation.Horizontal, "Номер записи")
stm.setHeaderData(1, QtCore.Qt.Orientation.Horizontal, "Категория")
vbox = QtWidgets.QVBoxLayout()
tv = QtWidgets.QTableView()
tv.setModel(stm)
tv.setColumnWidth(1, 60)
tv.setColumnWidth(2, 150)
vbox.addWidget(tv)
btnAdd = QtWidgets.QPushButton("&Добавить запись")
btnAdd.clicked.connect(addRecord)
vbox.addWidget(btnAdd)
btnDel = QtWidgets.QPushButton("&Удалить запись")
btnDel.clicked.connect(deleteRecord)
vbox.addWidget(btnDel)
window.setLayout(vbox)
window.resize(400, 250)
window.show()
sys.exit(app.exec())
Проблема в том, что если таблице нет записей то при нажатии на кнопке, "&Добавить запись", таблица не переходит в режим редактирования и вsходит сообщение: . И как не меняй функцию: "addRecord"

Код:
if stm.value("category") == []:
        # Вставляем пустую запись, которую пользователь сможет ввести нужные данные
        stm.insertRecord(stm.rowCount())
или
Код:
if stm.Null == True:
        # Вставляем пустую запись, которую пользователь сможет ввести нужные данные
        stm.insertRecord(stm.rowCount())
все равно выходит сообщение:
 
  • Мне нравится
Реакции: Dr. Mundo

Dr. Mundo

Модератор
Команда форума
Модератор
Фев 13, 2024
26
1
3
Какое сообщение выходит?
 

Kim Jon

Новичок
Пользователь
Авг 1, 2021
22
2
3
Process finished with exit code -1073740791 (0xC0000409)
 

Kim Jon

Новичок
Пользователь
Авг 1, 2021
22
2
3
простите поторопился, пропустил строчку
 

Dr. Mundo

Модератор
Команда форума
Модератор
Фев 13, 2024
26
1
3
Ошибка, которую вы получаете, может быть связана с тем, что вы пытаетесь вставить пустую запись в модель, но не проверили, действительно ли это возможно. В случае, если таблица пуста, вам нужно убедиться, что вы правильно работаете с моделью и базой данных.

Попробуйте изменить ваш код в функции addRecord() следующим образом:

Python:
def addRecord():
    if stm.rowCount() == 0:
        # Если в таблице нет записей, добавляем пустую
        stm.insertRecord(stm.rowCount())
        stm.submitAll()  # Сохраняем изменения в базе данных
    else:
        # Здесь можно добавить логику для случая, если записи уже есть
        pass

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

Кроме того, проверьте, что файл базы данных (data.sqlite) существует и доступен для записи. Если база данных не существует или не может быть открыта, это также может вызвать ошибки.

Попробуйте внести эти изменения и проверить, решит ли это вашу проблему.
 

Форум IT Специалистов