Страница 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
Alexander писал(а):Рекомендуем Вам обратиться к следующей статье за деталями http://blog.devart.com/mind-data-modifi ... mysql.html
Спасибо за ссылку. Ситуация очень похожа, но там явно указана проблема - поле заданное в условии 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
Исправление данной проблемы будет включено в очередной сборке продукта, которую мы планируем выпустить в начале июня.