2016-08-01 16 views
0

私はMySQLデータベースでクエリを実行するQTアプリケーションを構築しています。私はquery.exec("call SelectUsersPhotos()")を返すだけですが、回答コードはprepareに設定すると、データベースの値が返されず、エラーもスローされません。Qt mysql query prepareが動作しない

if (db.open()) { 
    cout << "Querying GetUserPhotos from user " << user->Name << endl; 

    QSqlQuery query; 

    query.prepare("call SelectUsersPhotos()"); 
    query.exec(); 

    while (query.next()) { 
     UserPhoto *userPhoto = new UserPhoto(); 
     userPhoto->UserPhotoId = query.value(0).toInt(); 
     userPhoto->UserId  = query.value(1).toInt(); 
     userPhoto->Created  = query.value(2).toDateTime(); 
     userPhoto->Name  = query.value(3).toString().toStdString(); 
     usersPhotos->push_back(userPhoto); 
    } 

    query.finish(); 

    db.close(); 

    cout << "Photos " << usersPhotos->size() << endl; 
} 

資源:http://qt.developpez.com/doc/4.6/qsqlquery/

答えて

-1

は "実行するためのSQLクエリクエリを準備し、クエリが正常に準備されている場合はtrueを返し、そうでない場合はfalseを返します。。"

多分あなたは

bool b = query.prepare("call SelectUsersPhotos()"); 
while(!b) 
    b = query.prepare("call SelectUsersPhotos()"); 
query.exec(); 

EDIT試してみてください: 関数のシグネチャをので、それは価値のアドレスを必要とするが、uはパラメータとして右辺値を渡している

bool QSqlQuery::prepare (const QString & query) 

です。たぶんuが

QString qstr("call SelectUsersPhotos()"); 
query.prepare(qstr); 
query.exec(qstr); 

を試してみてください、私はなぜ幹部(のconst QStringの&クエリを)知らないノートでは、同じ参照パラメータを持っている場合でも動作します。

+0

query.prepareは真を返しますが、それでも何も返されません。 –

+1

クエリが無効で、おそらく - 何らかの遅延の後に突然有効にならない場合、なぜあなたは永遠にループする危険がありますか?悪いアドバイスのようです。 '!='値のアドレスを参照します。 refは最適化され、値なしのアドレスに置き換えられます。指示対象のアドレスが取られた場合、それは異なっている。より多くの点: 'const&'は一時的な値に結びつくだけで、参照のスコープまで生涯拡張されます。例えば'std :: string'を使って関数に右辺値を渡したことはありませんか?それはうまく動作します。したがって、それは質問される質問には関係しません。 –

関連する問題