![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Трехзвенка: ошибка при редактировании
Val © (2008-07-24 22:43:00)Добрый день.
Имеется связка: MySQL + mysqlconnector + (TADODataSet + TDataSetProvider) + TClientDataSet.
В свойствах провайдера UpdateMode = upWhereKeyOnly.
Как в ADODataSet так и в ClientDataSet созданы наборы статичных полей.
Для ключевых полей ProviderFlags указаны [pfInWhere,pfInKey], для остальных - [pfInUpdate]. Это как для ADO, так и для ClientDataSet.
При работе с набором данных вроде бы все в порядке, НО:
если перевести датасет в режим редактирования, стереть в DBEdit значение поля, затем повторить его -> Post -> при ApplyUpdates(0) получаю ошибку "Record not found or changed by another user." - почему, и что сделать?
В остальном все в порядке: редактирование, вставка, удаление..гуглю заколебал, полей типа дата/время с миллисекундами в наборе нет. На данный момент режим однопользовательский.
Заранее благодарен за помощь.
Val (2008-08-01 11:06:00) [1]VarIsNull(DataSet.Delta), VarIsEmpty(DataSet.Delta) = False
Polevi (2008-08-01 09:42:00) [2]dataset.Delta <> nil ?
Val (2008-07-31 10:35:00) [3]в обработчике OnReconcileError, при перехвате стандартным HandleReconcileError, видно, что все поля, кроме изменяемого, имеют значение <Unchanged> в ModifiedValue, а изменяемое поле имеет одно и то же значение, как в ModifiedValue, так и в OriginalValue.
Val (2008-07-31 10:20:00) [4]ChangeCount = 1 (редактируется по 1 записи на форме).
Polevi (2008-07-31 09:30:00) [5]чему равно dataset.ChangeCount ? проверяешь перед ApplyUpdate ?
Val (2008-07-30 13:40:00) [6]запросы простые...вот например:
таблица
CREATE TABLE IF NOT EXISTS users
(UserName VARCHAR(40) NOT NULL,
UserPwd VARBINARY(40) NOT NULL,
FirstName VARCHAR(40),
LastName VARCHAR(40),
EmailAddress VARCHAR(40),
PhoneNumber VARCHAR(32),
IsActive BOOLEAN NOT NULL DEFAULT 1,
IsSuspended BOOLEAN NOT NULL DEFAULT 0,
CONSTRAINT pk_users PRIMARY KEY (UserName),
CONSTRAINT ck_UserPwd CHECK (LENGTH(UserPwd) > 6)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
запрос в ADODataSet
SELECT u.* ,
CASE u.IsActive
WHEN 0 THEN 'No'
WHEN 1 THEN 'Yes'
END AS IsActiveText,
CASE u.IsSuspended
WHEN 0 THEN 'No'
WHEN 1 THEN 'Yes'
END AS IsSuspendedText
FROM users u
Johnmen (2008-07-29 12:14:00) [7]
> Нат (29.07.08 10:57) [1]
Ты писатель, это видно сразу. Мог бы для разнообразия и почитать. Например, эту фразу "В остальном все в порядке: редактирование, вставка, удаление.."
Нат (2008-07-29 10:57:00) [8]Довольно распространеннаяя проблема.
Решается не всегда легко.
Скорее всего у Вас нередактируемый запрос, слишком сложный с вычисляемыми полями и неоднозначными связями.
Самое надежное - упростить запрос.
Проверить наличие в запросе ключевых полей всех связанных таблиц
В Проперти "Unique table" указать одну таблицу
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=420