Python Вставляет данные из виджета Qtable в Ms Access с помощью базы данных QSqlDatabase

#python #qsqldatabase

Вопрос:

Это то, что у меня есть до сих пор:

  def save_invoice(self):

    con = QSqlDatabase.addDatabase("QODBC")
    con.setDatabaseName("C:/Users/Egon/Documents/Invoice/Invoice.accdb")

    # Open the connection
    con.open()        
    # Creating a query for later execution using .prepare()
    insertDataQuery = QSqlQuery()
    insertDataQuery.prepare(
        """
        INSERT INTO Test01 (
            Quantity,
            ProductId,
            Description,
            Price,
            Tax,
            NetTotal,
            GrossTotal
        )
        VALUES (?, ?, ?, ?, ?, ?, ?)
        """
    )
    
    data = getData(self.tableWidgetInvoiceItem)     

    for Quantity, ProductId, Description, Price, Tax, NetTotal, GrossTotal in data:
        insertDataQuery.addBindValue(Quantity)
        insertDataQuery.addBindValue(ProductId)
        insertDataQuery.addBindValue(Description)
        insertDataQuery.addBindValue(Price)
        insertDataQuery.addBindValue(Tax)
        insertDataQuery.addBindValue(NetTotal)
        insertDataQuery.addBindValue(GrossTotal)
        insertDataQuery.exec_()     
        print(insertDataQuery.lastError().text())
        con.commit()
 

Извлеките данные из QTableWidget и верните их как data .

 def getData(table: QTableWidget) -> List[Tuple[str]]:


data = []
for row in range(table.rowCount()):
    rowData = []
    for col in range(table.columnCount()):
        rowData.append(table.item(row, col).data(Qt.EditRole))
    data.append(tuple(rowData))

return data    
 

Сообщение об ошибке не отображается, но и записи в базу данных не вставляются. Как я могу это решить?

Ответ №1:

Попробуйте использовать QSqlDatabase.commit() вместо con.commit() .

Комментарии:

1. это заканчивается здесь: ошибка типа: фиксация(self): первый аргумент несвязанного метода должен иметь тип «QSqlDatabase»

2. я разгадал ее! это была строка, как я и думал, con.setDatabaseName(«ДРАЙВЕР={Драйвер Microsoft Access (*.mdb, *.accdb)};FIL={MS Access};DBQ=C:/Пользователи/Egon/Документы/Счет-фактура/Счет-фактура.accdb»)