我有这个代码片段调用数据库表,我在那里执行一些操作,比如分配一个房间,字段HostelName
是NULL。
但是在尝试了许多方法后,我的代码中没有真正观察到NULL字段,并且执行总是进入第一个IF语句,即使该字段为NULL。有没有办法检查字段是否为NULL并执行相应的操作?在Qt和数据库中有点新手。
注意:
MatricNo是主键。显然,SELECT语句只返回一条记录(我猜)。
qry.prepare("SELECT * from student where matricno='"+matric+"' and HostelName IS NULL");
qry.exec();
QSqlRecord rec = qry.record();
if(rec.isNull("HostelName"))
{
qry.prepare("UPDATE student set HostelName='"+hostelName+"',RoomNo='"+roomNo+"' where MatricNo='"+matric+"'");
if(qry.exec())
{
qry.prepare("UPDATE Rooms set OccupantsNo=OccupantsNo-1 where HostelName='"+hostelName+"' and roomID='"+roomNo+"'");
if(qry.exec())
{
QMessageBox::critical(this,tr("Error"),tr("Student Room Allocated"));
}
else
{
QMessageBox::critical(this,tr("Error"),qry.lastError().text());
}
}
else
{
QMessageBox::critical(this,tr("Error"),qry.lastError().text());
}
}
else
{
QMessageBox::critical(this,tr("Error"),"Cant Allocate Room: \nStudent Room Already Alloted\nTo Re-Allocate, Go to Edit Student Details");//qry.lastError().text());
}
答案 0 :(得分:0)
请考虑代码中的以下问题:
首先:你的rec
只是空的!您在QSqlRecord rec
之后立即分配qry.exec()
..结果当前位于第一条记录之前的 ,您必须先将查询定位到第一条记录QSqlQuery::next()
。至少这是让你的代码工作所必需的。
qry.exec();
qry.next();
QSqlRecord rec = qry.record();
第二:你的sql语句已根据HostelName IS NULL
选择
但是你正在检查rec.isNull("HostelName")
的结果...这只是无用而且不必要,你可能想要rec.isNull("RoomNo")
或别的什么或什么都没有!但在您的select语句之后,HostelName
的记录值始终为NULL
。