Python 如何使用QSqlTableModel和QLineEdit筛选ms access数据库?
我正在构建一个GUI,允许用户在ms access数据库中搜索信息 是的。必须是ms接入 用户有一个文本字段,可以在其中键入搜索 并且Tableview应该立即更新。 此时,只要在字段中键入字母,DB就会消失 我花了一段时间才发现问题:我的SQL语句根本不正确。 感谢model.lastError 整个函数如下所示:Python 如何使用QSqlTableModel和QLineEdit筛选ms access数据库?,python,sql,ms-access,pyside6,pyqt6,Python,Sql,Ms Access,Pyside6,Pyqt6,我正在构建一个GUI,允许用户在ms access数据库中搜索信息 是的。必须是ms接入 用户有一个文本字段,可以在其中键入搜索 并且Tableview应该立即更新。 此时,只要在字段中键入字母,DB就会消失 我花了一段时间才发现问题:我的SQL语句根本不正确。 感谢model.lastError 整个函数如下所示: self.ui.Kistenschild_suchen.textChanged.connect(self.update_filter) def update_f
self.ui.Kistenschild_suchen.textChanged.connect(self.update_filter)
def update_filter(self, s):
s = re.sub("[\W_]+", "", s)
filter_str = 'Produkt LIKE %{}%"'.format(s)
self.ui.model.setFilter(filter_str)
print(self.ui.model.lastError())
在这种情况下,我输入了k
错误消息是:
PySide6.QtSql.QSqlError("-3100", "QODBC: Unable to execute statement", "[Microsoft][ODBC-Treiber für Microsoft Access] Syntaxfehler in Abfrageausdruck 'Produkt LIKE (%h%\")'.") at 0x000001CA4FB33B88>
兴趣点应该是
“%h%”
因为它显示的字符比键入的多
我试着用几种方式进行更改,比如将%更改为*和?
还是没什么
编辑:
以下是最小可重复性示例:
进口稀土
导入系统
从PySide6.QtCore导入QSize,Qt
从PySide6.QtSql导入QSqlDatabase,QSqlTableModel
从PySide6.QtWidgets导入
QApplication,
QLineEdit,
QMainWindow,
QTableView,
QVBoxLayout,
QWidget,
Driver=r'Driver={Microsoft Access Driver*.mdb,*.accdb};DBQ=D:\scripts\python\pyside\u Tutorials\databases\chinook.accdb'
db=QSqlDatabaseQODBC
db.setDatabaseNameDriver
db.open
类MainWindowQMainWindow:
定义初始自我:
超级__
容器=QWidget
布局=QVBoxLayout
self.search=QLineEdit
self.search.textChanged.connectself.update\u过滤器
self.table=QTableView
layout.addWidgetself.search
layout.addWidgetself.table
container.setLayoutlayout
self.model=QSqlTableModeldb=db
self.table.setModelself.model
self.model.setTableTrack
self.model.select
self.setminimumsizeqsize1024600
self.setCentralWidgetcontainer
标记::过滤器[]
def更新过滤器自身:
s=re.sub[\W\uz]+,s
filter_str='Name LIKE%{}%'。格式
self.model.setFilterfilter\u str
printself.model.lastError
印刷品、类型
结束::过滤器[]
app=QApplicationsys.argv
窗口=主窗口
橱窗秀
app.exec
此代码向我提供错误消息:
这意味着:需要1个参数,但传递的参数太少
已解决:
MS Access需要一个双撇号,如: def更新过滤器自身: s=re.subr[\W\uz]+,s 筛选器_str=fProdukt“{s}%” self.model.setFilterfilter\u str```
MS Access需要一个双撇号,如: def更新过滤器自身: s=re.subr[\W\uz]+,s 筛选器_str=fProdukt“{s}%” self.model.setFilterfilter\u str```
谢谢@eyllanesc。我改了打字错误。但错误依然存在。正如我提到的,我尝试了不同的方法来找到解决方案。下面是一个特定Pyside6书籍中的示例:“filter_str=”Name LIKE%{}%'.formats',但在示例中它是一个QSqlite数据库。我认为,区别对于问题来说是至关重要的。错误不能完全相同,除了提供类似于%{}%的Produkt之外,显示新的错误消息与类似于%{}%@eyllanesc的Produkt不同您是对的。\和dissapeard.TYPO:use filter_str='Produkt LIKE%{}%'