Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

автоинкрементное поле в TClientDataSet   Найти похожие ветки 

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

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


 
Loginov Dmitry ©   (2012-05-16 16:31) [1]

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


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

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


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

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


 
AV ©   (2012-05-17 08:59) [4]

я б потомка написал
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, сделал бы потокобезопасными


 
AV ©   (2012-05-17 09:57) [5]

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

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



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.125 c
2-1330198166
Alex_C
2012-02-25 23:29
2013.03.22
Закрыть фаил. Надежно.


15-1335792488
Knight
2012-04-30 17:28
2013.03.22
Триггер в FireBird


2-1333615982
webpauk
2012-04-05 12:53
2013.03.22
передача в процедуру массива


15-1341124080
Mihaker
2012-07-01 10:28
2013.03.22
Win7 ShellServiceObjectDelayLoad


2-1340358517
webpauk
2012-06-22 13:48
2013.03.22
Присвоение TNotifyEvent