2014-01-20 69 views
1

我已经创建了一个应用程序,我必须在tableWidget中显示来自数据库的数据,并且我成功地将它显示在表格中。问题是我没有得到如何从QTableWidget中的选定行中获取ID值,以便从sql db中删除该行。请帮助我。这就是我曾尝试:从sqlite数据库中显示的qtableWidget删除一行

def removebutton_Clicked(self): 
db_id = self.get_currentId() 
self.queryCurs.execute("DELETE FROM PATIENT WHERE ID = %d" % (db_id)) 
self.createDb.commit() 

def get_currentId(self): 
if self.patientTable.currentIndex(): 
    index = self.patientTable.currentIndex().row() 
    print index 
    db_id = self.patientTable.index.value("ID") 
    return db_id 

我没有得到如何得到表的行的电流id .....请帮助我,我被卡住

回答

0

首先,确保返回db_id是有效的值。

self.queryCurs.execute("DELETE * FROM PATIENT WHERE ID LIKE ?",[db_id]) 

,将删除*(全行)来自患者(表)WHERE ID(是)LIKE DB_ID

例如,我在我的代码不止一个条件:

cur.execute("SELECT * FROM Elements WHERE Name LIKE ? OR Type LIKE ? OR Id LIKE ?", [searchWord, searchWord, searchWord]) 

编辑 由于您没有在self.patientTable中使用模型,因此您需要使用所需的“ID”填充该表的任何列(可以隐藏)。 这样,你可以把它像这样:

db_id = (self.patientTable.item(self.patientTable.currentIndex().row(), col).text()).toUtf8() 

其中col是您存储的ID值列的列数

+0

ķ但如何获得的ID那个特定的行是我的问题是关于 –

+0

所有你所说的'return db_id'不会返回正确的值?在这种情况下,告诉我你的'self.patientTable'的哪一列填充了该值 – Aleksandar

0

你假设在GUI中的行数与在该ID对应数据库?不要这样做。只要行保留在数据库表中,数据库行ID应保持不变,而GUI表显示更为短暂。其副作用是在几次插入和删除之后,数据库表ID可能变得不连续,并且不能从0或1开始。

GUI数据模型需要记住显示数据的每一行数据库表行的ID,即使它不显示给用户(除了可能用于调试) - 因此,当您删除行时,您只需让模型告诉您ID,然后按该ID删除。代码是微不足道的,只要你得到正确的GUI模型,就可以使用

(这也将让你实现按列排序很容易,如果你选择;与身份从订单和指数分开,你可以洗牌的东西,你想要的任何方式)

+0

另外,请勿将值替换为SQL。使用参数化查询。它速度更快 - 它可以更好地被数据库缓存 - 而且更安全,而且它的操作非常简单。 –

+0

其实我不使用模型在这里我直接使用qtablewidget, –

+0

里面qtablewidget我显示表从sqlite数据库,所以我怎么能得到id的模型,如你所说在qtablewidget –