Найти - Пользователи
Полная версия: Не заполняется таблица в БД
Начало » Базы данных » Не заполняется таблица в БД
1
KImJon
Приветствую Друзья!!!
Объясните пожалуйста мне, один нюанс в табличной модели. Я уже который день голову ломаю
Начну с самого начала вернувшись обратно к своей любимой теме, “Создание СУБД”….. Изучаю я по книге: Прохорёнок Н.А. Дронов В.А. - 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ходит сообщение:
Process finished with exit code -1073740791(0xC0000409)
. И как не меняй функцию:
“addRecord”
 if stm.value("category") == []:
        # Вставляем пустую запись, которую пользователь сможет ввести нужные данные
        stm.insertRecord(stm.rowCount())
или
  if stm.Null == True:
        # Вставляем пустую запись, которую пользователь сможет ввести нужные данные
        stm.insertRecord(stm.rowCount())
все равно выходит сообщение:
Process finished with exit code -1073740791 (0xC0000409)
vic57
пример рабочий
https://it.kgsu.ru/Python_Qt/pyqt5_173.html
KImJon
stm.select
тут ошибка - stm.select()
проверьте есть ли таблица такая
 con.setDatabaseName("data.sqlite")
print(con.open())
print(con.tables())
KImJon
Таблица есть
Все как положено сделал
 C:\Users\mikki\PycharmProjects\PythonProject5\.venv\Scripts\python.exe C:\Users\mikki\PycharmProjects\PythonProject5\Database\InsertTbCategory.py 
True
['good', 'sqlite_sequence', 'name', 'klass', 'category']
Process finished with exit code -1073740791 (0xC0000409)
Также я смотрел через программу “DB Browser for SQLite”

vic57
попробуйте через try/except ошибку отловить
 def addRecord():
    try:
        if stm.value("category") == []:
            # Вставляем пустую запись, которую пользователь сможет ввести нужные данные
            stm.insertRecord(stm.rowCount())
    except Exception as e:
        print(repr(e))
vic57
vic57
if stm.value(“category”) == :
у меня такая ошибка вылезла
 'QSqlTableModel' object has no attribute 'value'
vic57
специально дронова посмотрел.
научитесь переписывать без ошибок хотя бы
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB