2014-01-20 50 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 –