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

最近使用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;
   }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值