def query_data(self, new_window): # 获取输入框中的数据 data = self.input_box.text().split(",") if len(data) != 2 or not all(map(lambda x: x.strip(), data)): self.status_label.setText("输入格式错误!请按照 部门/姓名/性别/职位/工号/状态,对象 格式输入。") return # 执行 SQL 查询语句 sql = "select * from Staff where (?) = (?)" self.cursor.execute(sql) # 获取查询结果并显示在表格中 rows = self.cursor.fetchall() self.table = QTableWidget() if rows: self.table.setRowCount(len(rows)) self.table.setColumnCount(len(rows[0])) for i, row in enumerate(rows): for j, col in enumerate(row): item = QTableWidgetItem(str(col)) self.table.setItem(i, j, item) self.table.setHorizontalHeaderLabels(["部门", "姓名", "性别", '职位', '工号', '状态']) self.table.horizontalHeader().setVisible(True) self.v_layout = QVBoxLayout(new_window) self.v_layout.addWidget(self.input_box) # 添加表格到新窗口中 self.v_layout.addWidget(self.table) new_window.setLayout(self.v_layout) new_window.show()查错
时间: 2024-02-14 13:06:41 浏览: 20
根据你提供的代码,`self.cursor.execute(sql)` 执行的是一个 SQL 查询语句,但是并没有将查询语句中的参数 `(?)` 和 `(?)` 进行替换。因此,在执行 `self.cursor.execute(sql)` 时会出现错误。
你需要将查询语句的 `(?)` 替换为具体的参数值。可以使用 `pyodbc` 模块提供的 `execute` 方法的第二个参数来替换这些参数。例如:
```
sql = "select * from Staff where {} = ?".format(data[0])
self.cursor.execute(sql, (data[1],))
```
这个语句中,`{}` 是一个格式化字符串,用于将 `data[0]` 插入到 SQL 查询语句中。然后,使用 `self.cursor.execute(sql, (data[1],))` 方法执行 SQL 查询语句,并将 `data[1]` 作为参数传递给查询语句中的 `(?)`。
你还需要注意,`self.input_box` 没有在代码中定义,因此在运行代码时可能会引发错误。
希望这可以帮助你解决问题。
相关问题
class LinkNode: #单链表结点类 def __init__(self,data=None): #构造函数 self.data=data #data属性 self.next=None #next属性 class LinkList: #单链表类 def __init__(self): #构造函数 self.head=LinkNode() #头结点head self.head.next=None def CreateListF(self, a): #头插法:由数组a整体建立单链表 def CreateListR(self, a): #尾插法:由数组a整体建立单链表 def geti(self, i): #返回序号为i的结点 p=self.head j=-1 while (j<i and p is not None): j+=1 p=p.next return p def Add(self, e): #在线性表的末尾添加一个元素e def getsize(self): #返回长度 p=self.head cnt=0 while p.next is not None: #找到尾结点为止 cnt+=1 p=p.next return cnt
好的,那么接下来我会帮助您补齐这段代码的缺失部分。请注意,以下代码仅供参考,具体实现可能因情况而异,您可以根据自己的需求进行修改:
```python
class LinkNode: #单链表结点类
def __init__(self,data=None): #构造函数
self.data=data #data属性
self.next=None #next属性
class LinkList: #单链表类
def __init__(self): #构造函数
self.head=LinkNode() #头结点head
self.head.next=None
def CreateListF(self, a): #头插法:由数组a整体建立单链表
for i in range(len(a)):
node = LinkNode(a[i])
node.next = self.head.next
self.head.next = node
def CreateListR(self, a): #尾插法:由数组a整体建立单链表
p = self.head
for i in range(len(a)):
node = LinkNode(a[i])
p.next = node
p = node
def geti(self, i): #返回序号为i的结点
p = self.head
j = -1
while (j < i and p is not None):
j += 1
p = p.next
return p
def Add(self, e): #在线性表的末尾添加一个元素e
p = self.head
while p.next is not None:
p = p.next
node = LinkNode(e)
p.next = node
def getsize(self): #返回长度
p = self.head
cnt = 0
while p.next is not None: #找到尾结点为止
cnt += 1
p = p.next
return cnt
```
class LinkNode: #链队结点类 def __init__(self,data=None): #构造方法 self.data=data #data域 self.next=None #next域 class LinkQueue: #链队类 def __init__(self): #构造方法 self.front=None #队头指针 self.rear=None #队尾指针 def empty(self): #判断队是否为空 return self.front==None def push(self,e): #元素e进队 new_node = Node(e) # 创建新节点 if self.empty(): # 如果队列为空,则新节点既是队头也是队尾 self.front = new_node self.rear = new_node else: self.rear.next = new_node # 将新节点链到队尾 self.rear = new_node # 更新队尾指针 def pop(self): #出队操作 if self.empty(): # 如果队列为空,返回None return None node = self.front # 取出队头指针指向的节点 self.front = node.next # 更新队头指针 if self.front == None: # 如果删除的是最后一个节点,更新队尾指针 self.rear = None return node.data # 返回出队节点的数据 def gethead(self): #取队顶元素操作 if self.empty(): # 如果队列为空,返回None return None return self.front.data # 返回队头指针指向的节点的数据
这段代码存在一个问题,即在push方法中创建新节点时,使用了错误的类名Node,应该使用LinkNode。修正后的代码如下:
```
class LinkNode: #链队结点类
def __init__(self,data=None): #构造方法
self.data=data #data域
self.next=None #next域
class LinkQueue: #链队类
def __init__(self): #构造方法
self.front=None #队头指针
self.rear=None #队尾指针
def empty(self): #判断队是否为空
return self.front==None
def push(self,e): #元素e进队
new_node = LinkNode(e) # 创建新节点
if self.empty(): # 如果队列为空,则新节点既是队头也是队尾
self.front = new_node
self.rear = new_node
else:
self.rear.next = new_node # 将新节点链到队尾
self.rear = new_node # 更新队尾指针
def pop(self): #出队操作
if self.empty(): # 如果队列为空,返回None
return None
node = self.front # 取出队头指针指向的节点
self.front = node.next # 更新队头指针
if self.front == None: # 如果删除的是最后一个节点,更新队尾指针
self.rear = None
return node.data # 返回出队节点的数据
def gethead(self): #取队顶元素操作
if self.empty(): # 如果队列为空,返回None
return None
return self.front.data # 返回队头指针指向的节点的数据
```
修正后的代码中,创建新节点时使用了正确的类名LinkNode。