我正在使用sricite的eric4(qtdesigner,pyqt,python等),当我运行我编写的程序时,我不断收到“错误绑定参数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()
我在google上看过一些可能是引号的搜索?参数,但我已经检查过它们似乎是正确的。还读到它与角色地图(UTF?)有关的地方,但老实说我不知道怎么检查...... 我还添加了一些打印件,看看他们是否显示了我输入的正确数据并且它们是正确的。所以我仍然得到错误是非常令人难以置信的。
非常感谢任何帮助深深地鞠躬
答案 0 :(得分:3)
QlineEdit.text()
返回QString
。将它传递给unicode
构造函数以获得可用的东西。
答案 1 :(得分:1)
我有点能够重现这一点。
如果您传递字符串或数字甚至是Nik
的日期,一切正常。您描述的错误只有在您传递奇怪的Nik
时才会发生,例如一个阶级或一个职能。
检查input_data
的调用是否通过了正确的Nik
。很可能在某处忘记了()
,因此传递了类或函数而不是实例或函数的结果。