1

データベースのテーブルにデータを挿入しようとしていますが、挿入に失敗しました。これは私が得たエラーです:

[Oracle] [ODBC] [Ora] ORA-01008:すべての変数がバインドされているわけではありません。

これが私のコードです:

#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();

   }

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

5

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!" );
}
于 2012-07-19T09:13:46.023 に答える