Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.062 c
2-1335432052
Pcrepair
2012-04-26 13:20
2013.03.22
Многопользовательский режим работы проги


2-1338107276
rikitiki2012
2012-05-27 12:27
2013.03.22
Автоматически прерывает выполнение (BreakPoint в настройках )


2-1342077313
AAsdr
2012-07-12 11:15
2013.03.22
MOuseMove и ширина понели на StatusBar


15-1333812420
БарЛог
2012-04-07 19:27
2013.03.22
Перенести иероглифы с листа А4 на обои


2-1334481801
Fr
2012-04-15 13:23
2013.03.22
Кака лучше?




   Наверх