
Довольно часто бывает необходимо решить саму проблему уникальности индекса именно для таблиц – ведь далеко не всегда есть возможность ключ дополнять меткой времени…
С этой целью надобно пользоватся методом под названием TTable.OnPostError.
При творении таблицы поле Ax мы добавляем типа по имени ftInteger либо же ftSmallInt, замыкающее наши ключевые поля.
Вот, например, нужно сделвть саму таблицу платежей всех абонентов, может в которой делатся некоторое количество различный платежей, сделанных только в один день.
abKod – представляет собой именно код абонента, который входит в сам ключ первичный
Data - представляет собой именно дату платежа, которая входит в ключ первичный
Ax - представляет собой именно добавочное поле, которое входит в ключ первичный и закрывает его.
TypeOpl - сам тип оплаты
Summ - сама сумма платежа
В представленном примере уникальность самого ключа возможно четко обеспечить исключительно за счет самого поля под названием Data, но все же достигается данный результат только за счет включения самого кода вот такого вида:
taOplData.Value:=taOplData.Value+Time;
потому как оператор стандартно вводит всего лишь только день, месяц и также год, а все остальное идет уже именно по умолчанию.
В представленном нами варианте, при самой попытке записи ключа не уникального начинается исключение и прога начинает обрабатывать данное исключение.
Вот кусок кода:
Const
eKeyViol = 9729; // здесь именно код ошибки самой BDE - нарушение записи уникальности
procedure TForm1.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
if (E is EDBEngineError) then // именно здесь приводится обычный код самого распознавания кода представленной
ошибки
if (E as EDBEngineError).Errors[0].Errorcode = eKeyViol then begin
DataSet.FieldByName('Ax').Value:=DataSet.FieldByName('Ax').Value+1;
// здесь именно увеличиваем само значение поля по имени Ax и дублируем Post
Action:=daRetry; // дублируем операцию сохранения
end;
end;
Данный вариант мы применяем во всех без исключения приложениях. К тому же - для всех начинающих, код пишем самого метода АО имени OnPostError исключительно для 1 таблицы, а для остальных всех, которые имеют поле по имени Ах, - только с помощью самого инспектора свойств-событий делаем для события под названием OnPostError ссылку на способ самой первой таблицы, именно для которой мы все это и проделывали...
Спонсор поста: Вам нужен удобный и просторный конференц зал? Компания "Окирое" предлагает аренду конференц залов в городе Киеве. В наличии имеется два различных конференц зала: большой и малый, а также комната для проведения кофе-брейков.