--- D:/Documents/qt-everywhere-opensource-src-4.8.0/src/sql/kernel/qsqlresult.cpp Thu Dec 08 02:06:02 2011 +++ C:/Qt/4.8.X_win32/src/sql/kernel/qsqlresult.cpp Tue Dec 27 14:18:48 2011 @@ -185,11 +185,12 @@ && (i == 0 || sql.at(i - 1) != QLatin1Char(':')) && (i + 1 < n && qIsAlnum(sql.at(i + 1)))) { int pos = i + 2; while (pos < n && qIsAlnum(sql.at(pos))) ++pos; - indexes[sql.mid(i, pos - i)] = count++; + indexes.insertMulti(sql.mid(i, pos - i), count); + count++; result += QLatin1Char('?'); i = pos; } else { if (ch == QLatin1Char('\'')) inQuote = !inQuote; @@ -724,23 +725,28 @@ QSql::ParamType paramType) { d->binds = NamedBinding; // if the index has already been set when doing emulated named // bindings - don't reset it - int idx = d->indexes.value(placeholder, -1); - if (idx >= 0) { - if (d->values.count() <= idx) - d->values.resize(idx + 1); - d->values[idx] = val; + QList idxs = d->indexes.values(placeholder); + if (idxs.size() > 0) { + foreach (int idx, idxs) { + if (d->values.count() <= idx) + d->values.resize(idx + 1); + d->values[idx] = val; + if (paramType != QSql::In || !d->types.isEmpty()) + d->types[idx] = paramType; + } } else { + int idx = 0; + d->values.append(val); idx = d->values.count() - 1; d->indexes[placeholder] = idx; + if (paramType != QSql::In || !d->types.isEmpty()) + d->types[idx] = paramType; } - - if (paramType != QSql::In || !d->types.isEmpty()) - d->types[idx] = paramType; } /*! Binds the value \a val of parameter type \a paramType to the next available position in the current record (row).