Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

автоинкрементное поле в TClientDataSet


Дмитрий Белькевич ©   (2012-05-16 16:01:00) 

Добрый всем день. Понадобилось создать автоинкрементное поле в компоненте TClientDataSet. Компонент работает с файлами cds, на форме два таких компонента, связаны по ключевым полям, через соответсвующие TDataSource'ы подсоединены к двум DBGrid'ам. Всё замечательно работает, редактирутся, сохраняется. Одно неудобство - приходится ключи вводить руками, что, понятно, неудобно. Кто работал с этими компонентами, скажите, как такое можно реализовать. D2010, если это имеет значение.


AV   (2012-05-17 09:57:00) [1]

блин, конечно, FKeyVal

> public св-во NextVal: integer; // FKeyVal := FKeyVal  +
>  Step; result := FKeyVal ;
> public св-во CurrVal: integer; //result := FKeyVal ;


AV   (2012-05-17 08:59:00) [2]

я б потомка написал
public св-во KeyField: string //какое поле автоинкремент
public св-во Step: integer;  // шаг инкремента
private FKeyVal: integer; // инициализируется при загрузке  >>максимальное значение ключевого поля,
public св-во NextVal: integer; // KeyField := KeyField +  Step; result := KeyField;
public св-во CurrVal: integer; //result := KeyField;

в BeforeInsert в мастере делать FieldByName[KeyField].AsInteger := NextVal;
в BeforeInsert в детайл делать FieldByName[KeyField].AsInteger := CurrVal;

если бы желание осталось, NextVal и CurrVal, сделал бы потокобезопасными


Дмитрий Белькевич   (2012-05-16 17:54:00) [3]

Ну и инкремент там же - в AfterInsert. Инкрементирую ключ таблицы-мастера.


Дмитрий Белькевич   (2012-05-16 17:53:00) [4]

Спасибо, похоже, что все получилось. Единственное - ключевое поле обновляю не в BeforePost, а в AfterInsert.


Loginov Dmitry   (2012-05-16 16:31:00) [5]

По AfterOpen запоминать в какой-нибудь переменной максимальное значение ключевого поля, по BeforePost увеличивать переменную на 1 и полученное значение присваивать ключевому полю.


Наверх

Титульная страница Поиск, карта сайта Написать письмо