在Python3中更新Sqlite3

2024-06-18 13:12:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个面向对象的函数来更新库存表,但是当通过单击按钮执行该函数时,它不会更新并使程序崩溃,有人能看到我该函数中的错误吗?我正在QtableWidget中选择要更新的产品

    def editarProd(self):
    cursor = banco.conexao.cursor()
    query = """SELECT E.IDPRODUTO,
                      E.CODBARRA, E.PRODUTO, 
                      C.CATEGORIA, printf("%.2f",E.ESTOQUE), 
                      printf("%.2f",E.ESTOQUE_MIN), printf("%.2f",E.VALOR_CUSTO), 
                      printf("%.2f",E.VALOR_VENDA), printf("%.2f",E.VALOR_VENDA-E.VALOR_CUSTO) AS "LUCRO", 
                      F.FORNECEDOR 
                      FROM ESTOQUE E 
                      INNER JOIN FORNECEDOR F
                      ON E.ID_FORNECEDOR = F.IDFORNECEDOR
                      INNER JOIN CATEGORIA C
                      ON E.ID_CATEGORIA = C.IDCATEGORIA
                      ORDER BY E.PRODUTO"""
    result = cursor.execute(query)
    for row_number in enumerate(result):
        if row_number[0] == self.listaprodutos.currentRow():
            data = row_number[1]
            IdProd = data[0]
            codbarra = self.codigotext.text()
            produto = self.produtotext.text()
            estoque = self.estoquetext.text()
            estoquemin = self.estoquemintext.text()
            valorcusto = self.precocustotext.text()
            valorvenda = self.precovendatext.text()
            Forn = self.fornecedorcomboBox.currentData()
            Cat = self.categoriacomboBox.currentData()
            try:
                cursor.execute = (f"""UPDATE ESTOQUE
                SET CODBARRA ='{codbarra}',
                    PRODUTO ='{produto}',
                    ESTOQUE = {estoque},
                    ESTOQUE_MIN = {estoquemin}, 
                    VALOR_CUSTO = {valorcusto},
                    VALOR_VENDA = {valorvenda},
                    ID_CATEGORIA = {Cat},
                    ID_FORNECEDOR = {Forn} 
                    WHERE IDPRODUTO = {IdProd}""")
                banco.conexao.commit()
                self.LoadDatabase ( )
                self.limparcampos ( )
            except Exception:
                msg = QMessageBox ( )
                msg.setText ( "Preencha os Campos" )
                msg.setWindowTitle ( "Dados não inseridos!" )
                msg.setStandardButtons ( QMessageBox.Ok | QMessageBox.Cancel )
                msg.exec_ ( )

Tags: 函数textselfidmsgcursorvalorrow
1条回答
网友
1楼 · 发布于 2024-06-18 13:12:22

我通过一些改变解决了我的问题,它工作得很好。 遵循代码

    def editarProd(self):
    try:
        cursor = banco.conexao.cursor()
        query = ("""SELECT IDPRODUTO, CODBARRA, PRODUTO, 
                          ID_CATEGORIA, ESTOQUE, 
                          ESTOQUE_MIN, VALOR_CUSTO, 
                          VALOR_VENDA, ID_FORNECEDOR
                          FROM ESTOQUE
                          ORDER BY PRODUTO""")
        result = cursor.execute(query)
        for row_number in enumerate(result):
            if row_number[0] == self.listaprodutos.currentRow():
                data = row_number[1]
                IdProd = data[0]
                codbarra = self.codigotext.text()
                produto = self.produtotext.text()
                estoque = self.estoquetext.text()
                estoquemin = self.estoquemintext.text()
                valorcusto = self.precocustotext.text()
                valorvenda = self.precovendatext.text()
                Forn = self.fornecedorcomboBox.currentData()
                Cat = self.categoriacomboBox.currentData()
                cursor.execute ( f"""UPDATE ESTOQUE SET CODBARRA='{codbarra}',
                                                        PRODUTO='{produto}',
                                                        ESTOQUE={estoque},
                                                        ESTOQUE_MIN={estoquemin},
                                                        VALOR_CUSTO={valorcusto},
                                                        VALOR_VENDA={valorvenda},
                                                        ID_CATEGORIA={Cat},
                                                        ID_FORNECEDOR={Forn}
                                                        WHERE IDPRODUTO={IdProd}""")
                banco.conexao.commit()
                self.LoadDatabase()
    except Exception:
        print('Erro!')

相关问题 更多 >