您的位置:首页 > 编程语言 > Qt开发

qt4.8与达梦数据库间的插入和更新字符串数值问题

2015-03-02 17:18 507 查看
最近使用qt-creator2.4.1和qt-4.8.1-mingw对达梦数据库进行插入和更新字符串数值发现了一些小问题,也许是qt4本身与达梦DM7之间的一些问题,个人不是很清楚,但是也有正确实现的方法,也许在qt5中没有类似的问题,这里就不讨论了。以下都是部分代码,只做讨论使用首先,使用ODBC连接并打开数据库
QSqlDatabase db=QSqlDatabase::addDatabase("QODBC");
QString name = "DSN=DM;server=localhost;TCP_PORT=5236;uid=SYSDBA;pwd=SYSDBA";
db.setDatabaseName(name);
bool isOk = db.open();
if(isOk)
{
return true;
}else{
QMessageBox::critical(0,QString("错误提示"),QString("对不起,数据库连接失败!"),QMessageBox::Cancel);
return false;
}
插入数据   插入出错
QSqlQuery query;
query.prepare("insert into test.person values(?,?)");//插入正确
query.bindValue(0,'EE');
query.bindValue(1,'ee11a');
query.exec();
数据库中的数据变成上图所示。以上的插入方法在oracle数据库中是正确的,但是在达梦中得不到正确结果。   正确插入还有两种方式可以得到正确的插入结果方式一:直接在prepare的values后使用常量,此时不需要使用bindValue()函数,如下语句
query.prepare("insert into test.person values('丫丫aa','1111')");
query.exec();
方式二:在bindValue()函数的第二个参数中使用QString类型的变量
QString nameValue="EE";
QString pswValue="ee1122a";
 query.prepare("insert into test.person values(?,?)");//插入正确
query.bindValue(0,nameValue);
query.bindValue(1,pswValue);
 query.exec();
数据更新在更新数据中,也会出现类似的情况,prepare中的占位符使用bindValue()函数赋值时,不可以直接使用字符串常量,只能使用QString类型的变量,以下方式可以正确更新数据
QString sql;
sql=QString("update test.person set psw = ? where name = '%1'").arg(QString("AA"));
query.prepare(sql);
QString pswVlaue="aa12bb";
query.bindValue(0,pswVlaue);
   query.exec();
//  query.prepare("insert into test.person values('丫丫aa','1111')");  //插入不乱码中文,数字都正确
 query.prepare("insert into test.person values(?,?)");//插入正确
// query.bindValue(0,nameline);
// query.bindValue(1,pswline);
QString nameValue="EE";
QString pswValue="ee1122a";
query.bindValue(0,nameValue);
query.bindValue(1,pswValue);
if(query.exec())
{
QMessageBox::information(this,QString("提示"),QString("插入成功!"),QMessageBox::Ok);
//accept();
return;
}
else {
QMessageBox::critical(this,QString("提示"),QString("插入失败!"),QMessageBox::Ok);
return;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息