Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
В базе test создаю таблицу t1 c одной записью:
USE `test`;
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`ID` int NOT NULL default '0',
`RAZ` float default '0',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
INSERT INTO `t1` (`ID`,`RAZ`) VALUES (283,1.81051);
Линкую test.t1 в MSA через ODBC и, открыв ее, пытаюсь изменить поле ID. Получаю сообщение о том, что запись блокирована другим пользователем. Корректировка через запрос проходит нормально.
Повторяю предыдущие действия, но
INSERT INTO `t1` (`ID`,`RAZ`) VALUES (283,1);
м снова пытаюсь корректировать. Всё ОК!
Экcперименты показали, что
1. В myISAM этого эффекта нет
2. В InnoDB:
2.1. Cитуация зависит от того, какое значение я заношу в поле REZ
2.2. Все нормально, когда вместо FLOAT ставлю DOUBLE или INTEGER
Как это можно объяснить?
Неактивен
А посмотрите количество соединений с базой? Не знаю, как 2003й, а у старого
аксесса были проблемы с пониманием, сколько подключений ему нужно. В частности,
он может держать одну запись открытой формой, а вторую пытаться сделать через
запрос.
Неактивен
Соединений ровнг одно.
Дополняю:
если внутри MSA делаю запрос:
update T1 set RAZ=1.25 where ID=283
то блокировка снимается.
Неактивен
Сложно сказать, боюсь, что надо смотреть запросы, которые приезжают
Попробуйте включить --log и посмотреть, что там реально приезжает.
Неактивен
Не в запросе дело.
Выполняю из консоли:
USE `test`;
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`ID` int NOT NULL default '0',
`RAZ` float default '0',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
INSERT INTO `t1` (`ID`,`RAZ`) VALUES (283,1.81051);
Присоединяю в MSA - не могу изменить: запись блокирована.
Из консоли выполняю
UPDATE `t1` SET `RAZ`= 1.25;
Присоединяю в MSA - все в порядке, могу менять запись. А вся разница лишь в значении RAZ
Причем можно назвать и еще ряд чисел, когда так происходит.
Эта штука выяснилась, когда мы качнули из MSA на 50000 записей и в ней куча FLOAT
Поменяли на DOUBLE и все работает нормально.
А как быть если все-же FLOAT?
Неактивен
Круто. Разумно я это никак объяснить не могу, правда. Ну то есть правильный
ответ тут: «скорее всего, это ошибка в MSA, т.к. в любых других программах
не проявляется», но почему так — интересно. Кстати, пробовали с другим
драйвером ODBC, может быть, бага в нем?
Неактивен
Во-первых:
по поводу ODBC у меня выбор небольшой (см. мои с Вами переговоры здесь же http://sqlinfo.ru/forum/viewtopic.php?id=1635).
Самое интересное, что когда я на блокированную запись
INSERT INTO `t1` (`ID`,`RAZ`) VALUES (283,1.81051);
из MSA делаю запрос
UPDATE t1 SET RAZ= 1.81051 WHERE ID=283
то блокировка уходит.
Во-вторых:
у меня такое впечатление, что на этом форуме MSA+mySQL неактуально. Может быть посоветуете другое место?
Неактивен
Хм, как-то это печально выглядит
Блокировка происходит не в сервере MySQL, Вы же можете из консоли при этом работать с
базой? Это какая-то внутренняя блокировка внутри MSA. Дело, конечно, не в значениях
FLOAT, а в каких-то ошибках. Или драйвер ODBC, или сам Access. Обновление всего лишь
сбрасывает какие-то внутренние блокировки, и все начинает работать.
Как это лечить — не известно. Если нужно продакшн-решение — переключайтесь в режим,
когда все работает (DOUBLE, Вы говорили, работает?)
Другое место, боюсь, не посоветую. Нужно найти где-то место, где обсуждают Аксесс...
Неактивен
Спасибо за внимание. Тема закрыта.
Неактивен
Страниц: 1