【发布时间】:2016-03-09 13:13:57
【问题描述】:
简而言之,此代码获取库存商品的数量,并通过添加来自 GUI 元素之一的数字来更新该值。每当我尝试运行以下代码时:
Change = self.ui.Modify_Stock_Screen_Change.text()
Change = int(Change)
DBConnect = pyodbc.connect('Driver={Microsoft Access Driver (*.mdb, *.accdb)}; Dbq=H:\\Computer Science\\X\\Y\\Z\\Database.accdb;')
DBSelect = DBConnect.cursor()
DBSelect.execute("select * from Stock where Stock_Item = ?", self.ui.Modify_Stock_Screen_Item.currentText())
TableRow= DBSelect.fetchone()
for Field in TableRow:
CurrentQuantity = TableRow[1]
CurrentQuantity = int(CurrentQuantity)
UpdatedQuantity = int(CurrentQuantity + Change)
DBSelect.execute('update Stock set Current_Quantity = UpdatedQuantity where Stock_Item = ?', self.ui.Modify_Stock_Screen_Item.currentText())
DBConnect.commit()
我收到以下错误:
DBSelect.execute('update Stock set Current_Quantity = "UpdatedQuantity" where Stock_Item = ?', self.ui.Modify_Stock_Screen_Item.currentText())
pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2. (-3010) (SQLExecDirectW)')
【问题讨论】:
-
Access 在错误消息
Too few parameters. Expected 2.中要求输入2 个参数的事实表明您可能在update Stock set Current_Quantity = UpdatedQuantity where Stock_Item = ?中拼错了列名。请检查Current_Quantity、UpdatedQuantity和Stock_Item。 -
@stephan 更新命令适用的列名是我的访问文件上的“Current_Quantity”,所以不可能是这样 - 我还拼写检查了这段代码中的每个变量并仔细检查了设计视图中的数据类型,所有这些都应该使命令能够继续。另外,我已经通读了代码并检查了所有的措辞/拼写,这一切似乎都是正确的——在每次更改后,我还快速将打印语句应用于每个变量,并且这些语句也会在更新之前产生正确的值数据库表。
-
澄清一下:
UpdatedQuantity是Stock表中的列名,还是应该是您在 Python 中DBSelect.execute上方的代码行中定义的变量UpdatedQuantity代码(而不是用户)?如果是后者,您的执行应该类似于DBSelect.execute('update Stock set Current_Quantity = ? where Stock_Item = ?', UpdatedQuantity, self.ui.Modify_Stock_Screen_Item.currentText()) -
@stephan 我更新了你所说的 - 现在产生了这个错误:
DBSelect.execute('update Stock set Current_Quantity = ? where Stock_Item = ?', UpdatedQuantity, self.ui.Modify_Stock_Screen_Item.currentText()) pyodbc.Error: ('HYC00', '[HYC00] [Microsoft][ODBC Microsoft Access Driver]Optional feature not implemented (106) (SQLBindParameter)')我假设这是我自己的访问权限,而不是代码 -
很难从这里调试(特别是因为我对 Access 了解不多),但 odbc 中的
Optional feature not implemented通常表示“数据库不支持的数据类型”。因此,我会检查您的 Python 代码中self.ui.Modify_Stock_Screen_Item.currentText()返回的数据类型,并将其与数据库预期的数据类型进行比较。
标签: python sql database ms-access pyodbc