Нет, необходимо использовать DoEvents иначе, весь UI, клавиатура и события Timer останутся ожидающими в очереди.
единственная вещь, которую можно сделать, называет DoEvents однажды для каждых 1 000 повторений или такого.
Мы не можем исключить этот вопрос из списка «неотвеченных» вопросов на StackOverflow, если не будет хотя бы одного ответа с положительным голосом. Итак, я повторяю решение, которое вы обсуждали выше, в комментариях.
@nos предлагает:
Ваша БД случайно использует MySQL Таблицы MyISAM? Они не поддерживают транзакции. Вам нужно будет использовать InnoDB столы, если вы хотите транзакцию поддержка.
@Billy отвечает:
Да, я использую таблицы MyISAM. Я перешел на таблицы InnoDB, и это работает. Спасибо.
(Я пометил это как ответ сообщества, поэтому я не получаю от него никаких очков.)
Если бы моя таблица была InnoDB (видно из SHOW CREATE TABLE xxx
) и моя транзакция не откатывалась, что бы вы предложили?
CREATE TABLE `EarningCode` (
`ID` int(11) NOT NULL auto_increment,
`EarningCode` varchar(16) collate utf8_unicode_ci NOT NULL,
`Description` varchar(255) collate utf8_unicode_ci NOT NULL,
`DateEffective` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`Rate` float NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1239 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Это часть модуля Тесты: у меня есть метод настройки, который запускает преобразование:
protected function setUp()
{
global $db;
$db->beginTransaction();
// Insert this tested object into db.
}
, и метод удаления, который должен гарантировать, что строка не будет вставлена в базу данных (каждый раз, когда тест запускается в этом тестовом классе, он выполняет setUp / tearDown, поэтому я не хочу, чтобы дубликаты заполняли мою таблицу db).
protected function tearDown()
{
global $db;
$db->rollBack();
}
Я проверил, какой SQL выполняется, и вижу, что autocommit имеет значение false при запуске транзакции и переключается на true после откатывается, но строка остается вставленной.
Ваш код в порядке.
Проверьте свой вариант стола. Вам нужно использовать Transacctional engine с InnoDb