1

値が有効なレコードに配置されていないというエラーが表示され続けます。MySQLでクエリを正常に実行しましたが、コードで何かを見落としていると思います。

query = QtSql.QSqlQuery("select patient_id," +
                        "(SUM(IF(uom_id = 1, value, 0)) / SUM(IF(uom_id = 1, 1, 0))) AS `Average radius`," +
                        "(SUM(IF(uom_id = 2, value, 0)) / SUM(IF(uom_id = 2, 1, 0))) AS `Average Volume`," +
                        "(SUM(IF(uom_id = 3, value, 0)) / SUM(IF(uom_id = 3, 1, 0))) AS `Average SA`" +
                        "from measurements" +
                        "WHERE image_id = " + self.dbImage.id.toString() +
                        "AND status = 'A'" +
                        "GROUP BY patient_id", self.db)
query.next()

radius_acc = query.value(1).toDouble()
volume_acc = query.value(2).toDouble()
SA_acc = query.value(3).toDouble()

print('average of previously accepted measurements includes ' +
      'radius = ' + str(radius_acc) +
      'volume = ' + str(volume_acc) +
      'SA = ' + str(SA_acc))

具体的には、QSqlQueryにクエリを入力する方法に問題があるかどうかを知りたいですか?または、value(n)メソッドを誤って使用しようとしていますか?

どちらも当てはまらない場合は、クエリでself.dbImage.id.toString()に間違ったパラメーターを使用していると思います。その場合は、明日同僚に質問します。

4

1 に答える 1

3

結果セットを反復処理するには、通常、whileループを使用します。

 while(query.next()){
     // do whatever you need with query.value()
 }

first()最初の行だけに関心がある場合は、whileループを使用して、を使用できます。

 while(query.first()){
     // do whatever you need with query.value()
 }

編集:申し訳ありませんが、あなたの問題を誤解しました。今、あなたはおそらくいくつかの文字列にいくつかのスペースを入れるのを忘れていることがわかります:

 "from measurements"

 " from measurements "
 #^ Here   and here ^^

これらのスペースがないと、クエリは次のようになります。

  "...d = 3, 1, 0))) AS `Average SA`from measurementsWHERE image_id = ..."

もちろん、これは有効なクエリではありません。

于 2012-05-03T02:19:27.263 に答える