2012-07-19 21 views
1

我试图将数据插入到数据库中的表中,但插入失败。这是我得到的错误:插入Qt中的数据库

[Oracle] [ODBC] [Ora]ORA-01008: not all variables bound.

这里是我的代码:

#include <QtCore/QCoreApplication> 

#include <QtSql> 
#include<QtDebug> 

int main(int argc, char *argv[]) 
{ 
QCoreApplication a(argc, argv); 

QSqlDatabase db= QSqlDatabase::addDatabase("QODBC"); 
db.setHostName("FCOESL200656336.qu.edu.qa"); 
db.setDatabaseName("EPQAS"); 
db.setUserName("SOUAD/testuser"); 
db.open(); 


if(db.open()) 
{ 
    qDebug() << "Opened!"; 

    QString sQuery =" insert into writers(W_Id,W_Name,Age,Gender,Nationality,Hand_Used)" 
      "Values(:W_Id,:W_Name,:Age,:Gender,:Nationality,:Hand_Used)"; 

      QSqlQuery qry; 

      qry.prepare(sQuery); 

      qry.bindValue(":W_Id",3); 
      qry.bindValue(":W_Name","fhsf"); 
      qry.bindValue(":Age",32); 
      qry.bindValue(":Gender",'F'); 
      qry.bindValue(":Nationality","klfds"); 
      qry.bindValue(":Hand_Used",'R'); 

     if(!qry.exec(sQuery)) 
      qDebug() << qry.lastError().text(); 
     else 
     qDebug("Inserted!"); 
    } 
else 
{ 
    qDebug() <<"Connection failed" << db.lastError().text(); 
} 

db.close(); 
return a.exec(); 

    } 

我怎么能解决这个问题?

+0

尝试执行您的查询作为一个字符串没有bindind。 – hank 2012-07-19 09:07:35

+0

谢谢hank,现在错误更改为这个错误:[Oracle] [ODBC] [Ora] ora-12899:对于列“SOUAD”。值过大“WRITERS”。“GENDER” Souad 2012-07-19 09:36:04

回答

4

您的if语句失败。

if(!qry.exec(sQuery)) 

这样做,QSqlQuery试图执行sQuery,但在sQuery中,您没有绑定任何值。你应该这样做:

if(!qry.exec()) 

因为这个函数将执行查询,你在前面准备了绑定值。整个应该看起来像这样:

if(db.open()) 
{ 
    qDebug() << "Opened!"; 

    QSqlQuery qry; 

    qry.prepare("INSERT INTO writers(W_Id,W_Name,Age,Gender,Nationality,Hand_Used)" 
       "VALUES(:W_Id,:W_Name,:Age,:Gender,:Nationality,:Hand_Used)"); 

    qry.bindValue(":W_Id",3); 
    qry.bindValue(":W_Name","fhsf"); 
    qry.bindValue(":Age",32); 
    qry.bindValue(":Gender",'F'); 
    qry.bindValue(":Nationality","klfds"); 
    qry.bindValue(":Hand_Used",'R'); 

    if(!qry.exec()) 
     qDebug() << qry.lastError().text(); 
    else 
     qDebug("Inserted!"); 
} 
+0

谢谢你血,我解决了这一点 – Souad 2012-07-19 09:40:22