Aios
@Aios
Программист - Lite.

Prepared Statements

Здравствуйте хабражители…

Есть код…

paste2.org/p/2000519

И ситуацию которую он провоцирует я понять не могу потом спрашиваю у вас…

Если в базе тип будет равен 1 то сработает первый кейс и запись в итоге удалиться вот этим кодом:

stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_EXTERNAL_MAIL);
stmt->setUInt32(0, id);
trans->Append(stmt);


Если сработает case 2 то запись удаляется только при определенном условии.
Если условие не сработало, запись не удалиться и при срабатывании:
} while (result->NextRow());

Оно почему то вернет эту же не удаленную запись и получаем в итоге замкнутую цикличность до тех пор пока для этой строки не сработает условие — а нужно что бы строчка пропускалась и обрабатывалась уже следующая строка…

Функция NextRow() выглядит так:
bool PreparedResultSet::NextRow()
{
    /// Only updates the m_rowPosition so upper level code knows in which element
    /// of the rows vector to look
    if (++m_rowPosition >= m_rowCount)
        return false;

    return true;
}


Подскажите пожалуйста что я делаю не так ибо в C++ дерево… Не будь у меня проблем с англоязычными форумами, я бы к вам не обращался — но и тут я тоже бревно…

спасибо всем кто сможет уделить время
  • Вопрос задан
  • 3071 просмотр
Решения вопроса 1
@Hint
По-моему вы код неправильно понимаете (проблема где-то в другом месте). Удалена строка или нет, цикл все равно будет завершен. Из результата (result) записи не удаляются в процессе выполнения тела цикла (даже в случае добавления SQL с DELETE в транзакцию). А вот при следующем вызове метода SendExternalMails строки опять будут выбраны и опять попадут в result, если они не были удалены ранее.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Aios
@Aios Автор вопроса
Программист - Lite.
Господи какой же я критин — благодарю за подсказку!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы