2011-02-28 53 views
1

我正在使用eric4(qtdesigner,pyqt,python等)與sqlite和我不斷收到「錯誤綁定參數0 - 可能不受支持的類型」當我運行我編寫的程序。不斷得到「錯誤綁定參數0 - 可能不受支持的類型」

我已經使用eric4 + qtdesigner製作了一些GUI並生成了對話框代碼。當我在qtdesigner中創建的窗口中的一個按鈕被按下時,它應該訪問數據庫,然後提交併保存數據庫中的信息。我已經創建了一個單獨的py文件來訪問和保存數據庫。

這裏是我的代碼的一部分,這些代碼很可能是我不斷收到的錯誤的來源。

在所產生的UI的對話框(我導入的單獨的py文件):

def on_button_Save_released(self): 
     """ 
     Slot documentation goes here. 
     """ 
     # TODO: not implemented yet 
     Nik = self.LineEdit_Nickname.text() 
     NFirst = self.LineEdit_NameFirst.text() 
     NMid = self.LineEdit_NameMiddle.text() 
     NLast = self.LineEdit_NameLast.text() 
     BMon = self.ComboBox_BirthMonth.currentText() 
     BDay = self.ComboBox_BirthDay.currentText() 
     BYear = self.ComboBox_BirthYear.currentText() 
     CNum = self.LineEdit_ContactNum.text() 
     EM = self.LineEdit_EMail.text() 
     MAd = self.LineEdit_MailAdd.text() 

     self.NMem = NewMem() 
     self.NMem.input_data(Nik, NFirst, NMid, NLast, BMon, BDay, BYear, CNum, EM, MAd) 

而這在數據庫訪問和寫入,其是在一個單獨的py文件:

import sqlite3 
import datetime, time 

con = sqlite3.connect("Members.db") #access database 
cur = con.cursor() #cursor object for database 


class NewMem: 
    def input_data(self, Nik, NFirst, NMid, NLast, BMon, BDay, BYear, CNum, EM, MAd): 

     def adapt_datetime(ts): 
      return time.mktime(ts.timetuple()) 

     #Get current time and date 
     sqlite3.register_adapter(datetime.datetime, adapt_datetime) 
     now = datetime.datetime.now() 

     #created if first time to make a table 
     try: 
      cur.execute('create table Members (ID integer primary key autoincrement not null, Nick string not null, NameFirst string, NameMiddle string, NameLast string, BirthMonth string, BirthDay string, BirthYear string, ContactNum string, EMail string, MailAdd string, MemberSince string)') 
     except: 
      pass 

     cur.execute("insert into Members (Nick,NameFirst,NameMiddle,NameLast,BirthMonth,BirthDay,BirthYear,ContactNum,EMail,MailAdd,MemberSince) values (?,?,?,?,?,?,?,?,?,?,?)",(Nik, NFirst, NMid, NLast, BMon, BDay, BYear, CNum, EM, MAd, now)) 

     con.commit() 
     cur.close() 
     con.close() 

我在谷歌閱讀過一些搜索,可能是引號和?參數,但我已經檢查,他們似乎是正確的。還要閱讀它與字符映射(UTF?)有關的地方,但我真的不知道如何檢查... 我還添加了一些打印以查看它們是否顯示我輸入的正確數據他們是正確的。所以我爲什麼仍然得到這個錯誤是非常令人難以置信的。

任何幫助深表感謝鞠躬深深

回答

3

QlineEdit.text()返回QString。將它傳遞給構造函數unicode以獲得可用的內容。

+0

謝謝!我只是做了這樣的實例「Nik = unicode(self.LineEdit_Nickname.text())」,錯誤消失了:'D – hyoumoku 2011-02-28 14:50:12

1

我有點能夠重現這一點。

如果你傳遞一個字符串或一個數字,甚至一個日期作爲Nik,一切正常。你所描述的錯誤只有在你傳遞一個奇怪的東西時纔會發生,例如Nik,例如一個類或一個函數。

檢查調用input_data是否通過了正確的Nik。最有可能的一個()被遺忘的地方,所以傳遞一個類或函數,而不是實例或函數的結果。

+0

謝謝!嗯......即使我相信這是unicode構造函數的缺失,我仍然會檢查是否有實例在哪裏()以防萬一。謝謝:D – hyoumoku 2011-02-28 14:51:40

+1

接受的答案解釋了這一切:QString不按字符串規則播放。 – 9000 2011-02-28 16:17:27

相關問題