Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用QSqlTableModel和QLineEdit筛选ms access数据库?_Python_Sql_Ms Access_Pyside6_Pyqt6 - Fatal编程技术网

Python 如何使用QSqlTableModel和QLineEdit筛选ms access数据库?

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

我正在构建一个GUI,允许用户在ms access数据库中搜索信息 是的。必须是ms接入 用户有一个文本字段,可以在其中键入搜索 并且Tableview应该立即更新。 此时,只要在字段中键入字母,DB就会消失

我花了一段时间才发现问题:我的SQL语句根本不正确。 感谢model.lastError

整个函数如下所示:

    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%{}%'