Страница 1 из 1
Проблема при обновлении данных через табличное представление
Добавлено: Вт 27 янв 2015 13:14
DespotMagic
Столкнулся с такой проблемой. Уже сталкивался в прошлой версии. Не сразу понял что произошло, думал я что то сделал не так. Но сейчас повторилась такая же ситуация в новой версии 4.0.52
Суть. Пишу простой запрос
SELECT * FROM dbo.Event WHERE personnel_id=123
В таблице с результатом запроса выбираю эту таблицу для редактирования (выпадающий список таблиц из запроса) и вношу изменения в одну строчку. Сначала в одно поле(text), потом в поле personnel_id (меняю пользователя на 444).
Потом отвожу фокус, он вроде спрашивает "Сохранить изменения". Я выбираю "Да". И с виду всё хорошо. Остальные строки я пока вижу без изменения.
А на самом деле он эти строки тоже обновил!! Т.е. данные изменились не только у этой строки, а во всех строчках, которые были получены этим запросом (по условию personnel_id=123). Это обнаружил в программе, которые использует данные.
В результате у меня около 100 строк без моего ведома проапдейтелись на новый personnel_id и новый [text]. Остальные пока остались такими же.
Ощущение что выполнился запрос
UPDATE dbo.Event SET personnel_id=444 WHERE personnel_id=123
Сижу с бэкапа восстанавливаю записи...
Пробовал несколько раз воспроизвести - не получилось.
Re: Проблема при обновлении данных через табличное представление
Добавлено: Вт 27 янв 2015 14:17
Alexander
Рекомендуем Вам обратиться к следующей статье за деталями
http://blog.devart.com/mind-data-modifi ... mysql.html
Re: Проблема при обновлении данных через табличное представление
Добавлено: Вт 27 янв 2015 14:37
DespotMagic
Спасибо за ссылку. Ситуация очень похожа, но там явно указана проблема - поле заданное в условии WHERE не участвует в выборке SELECT. В качестве решения проблемы рекомендуют в SELECT указывать '*' или все поля из условия.
В моём случае использовалась как раз конструкция 'SELECT *' и произошло неявное обновление данных. Да и повторить у меня это не получается. Значит в общем случае всё нормально отрабатывает. Считаю, что это всё таки баг.
Может я в какой то определённой последовательности всё сделал и получил такую реакцию. Не могу точно сказать, делал всё на полуавтомате, так как проделовал такое много раз.
Re: Проблема при обновлении данных через табличное представление
Добавлено: Вт 27 янв 2015 15:33
Alexander
Не могли бы Вы прислать нам CREATE выражение данной таблицы?
Re: Проблема при обновлении данных через табличное представление
Добавлено: Пн 02 фев 2015 06:00
DespotMagic
Alexander писал(а):Не могли бы Вы прислать нам CREATE выражение данной таблицы?
Код: Выделить всё
CREATE TABLE dbo.Event (
id uniqueidentifier NOT NULL CONSTRAINT DF_Event_id DEFAULT (NEWID()),
personnel_id int NOT NULL,
category_id int NOT NULL,
title varchar(150) COLLATE Cyrillic_General_CI_AS NOT NULL,
text varchar(2500) COLLATE Cyrillic_General_CI_AS NOT NULL,
date datetime NOT NULL CONSTRAINT DF_Event_date DEFAULT (GETDATE()),
status int NOT NULL CONSTRAINT DF_Event_isExecute DEFAULT (1),
dateExecute datetime NULL,
expireDate datetime NULL,
UserComment varchar(1000) COLLATE Cyrillic_General_CI_AS NULL,
Marker uniqueidentifier NULL,
CONSTRAINT PK_Event PRIMARY KEY NONCLUSTERED (id),
CONSTRAINT FK_Event_Category FOREIGN KEY (category_id) REFERENCES dbo.Category (id) ON DELETE CASCADE,
CONSTRAINT FK_Event_StatusEvent FOREIGN KEY (status) REFERENCES dbo.StatusEvent (id)
) ON [PRIMARY]
GO
CREATE INDEX IX_Event_Date
ON dbo.Event (date DESC)
ON [PRIMARY]
GO
CREATE INDEX IX_Event_Marker
ON dbo.Event (Marker)
ON [PRIMARY]
GO
CREATE CLUSTERED INDEX IX_Event_PersonnelId_Clustered
ON dbo.Event (personnel_id)
ON [PRIMARY]
GO
Re: Проблема при обновлении данных через табличное представление
Добавлено: Вт 03 фев 2015 14:57
Alexander
Спасибо за ответ.
В данный момент мы занимаемся исследованием данной проблемы и свяжемся с Вами в ближайшее время.
Re: Проблема при обновлении данных через табличное представление
Добавлено: Пт 20 фев 2015 13:45
Alexander
Пожалуйста, выполните следующее:
1. Выберите 'Сервис -> Параметры' в основном меню.
2. В открывшемся окне 'Параметры' откройте ветку 'Среда -> Окно вывода'.
3. Выберите опции 'Вести журнал ошибок приложения' и 'Писать запросы, посылаемые программой, в SQL журнал'.
4. Отключите опцию 'Удалять лог файл после закрытия приложения'.
5. Нажмите 'OK'.
6. Перезапустите dbForge Studio for SQL Server.
7. Воспроизведите ошибку.
8. Если проблема повторится, откройте папку %SystemDrive%\Users\%UserName%\AppData\Roaming\Devart\dbForge Studio for SQL Server\ и пришлите нам сгенерированный .log файл с самой поздней датой.
Вы можете прислать ответ напрямую в нашу службу поддержки на supportATdevartDOTcom
Re: Проблема при обновлении данных через табличное представление
Добавлено: Ср 18 мар 2015 06:22
DespotMagic
Получилось воспроизвести похожую ситуацию при удалении записи. Удалил одну, а удалились все по совпадению поля, который является кластерным индексом (не ключом). По логам видно, что ключ в sql команде DELETE не участвует.
В поддержку отписался, приложил скриншоты и лог файл.
Re: Проблема при обновлении данных через табличное представление
Добавлено: Ср 18 мар 2015 10:56
Alexander
Не могли бы Вы также переслать данное письмо на alexaATdevartDOTcom ?
Re: Проблема при обновлении данных через табличное представление
Добавлено: Ср 18 мар 2015 11:05
DespotMagic
Alexander писал(а):Не могли бы Вы также переслать данное письмо на alexaATdevartDOTcom ?
Отправил
Re: Проблема при обновлении данных через табличное представление
Добавлено: Ср 18 мар 2015 12:28
Alexander
Спасибо за ответ.
Мы получили Ваше письмо и занимаемся исследованием данной проблемы.
Re: Проблема при обновлении данных через табличное представление
Добавлено: Пт 15 май 2015 13:31
DespotMagic
Хочу сообщить, что проблема опять проявилась!!! Решил удалить запись из табличного представления (одну из 1000), а он снёс все с условием из Where! Что то у вас какие-то траблы с таблицами, у которых нет ключей или они не стандартные!
Структура таблицы.
Код: Выделить всё
CREATE TABLE dbo.attendance (
id int IDENTITY,
personnel_id int NOT NULL CONSTRAINT DF_attendance_personnel_id DEFAULT (0),
dt datetime NOT NULL,
is_entrance bit NOT NULL CONSTRAINT DF_attendance_event DEFAULT (0),
house_id int NOT NULL CONSTRAINT DF_attendance_house_id DEFAULT (93)
) ON [PRIMARY]
Из вашего лога:
Код: Выделить всё
15.05.2015 16:07:09 | info | Output: SELECT * FROM personnel.dbo.attendance
WHERE personnel_id = 175 AND dt > '04/04/2015'
Время выполнения: 0,00205869374866652 секунд
Выбираю
одну запись в таблице, нажимаю Ctrl+Delete. В логах следующее:
Код: Выделить всё
15.05.2015 16:07:27 | info | Output: DELETE FROM [personnel].[dbo].[attendance] WHERE (([personnel_id] = @p1))
Параметры:
@p1: 175
Время выполнения: 0,0424410278643055 секунд
Ну как так????
Два месяца назад я отправил вам в support всю информацию по этой проблеме.
Re: Проблема при обновлении данных через табличное представление
Добавлено: Пт 15 май 2015 14:42
Alexander
Исправление данной проблемы будет включено в очередной сборке продукта, которую мы планируем выпустить в начале июня.