![]() |
#6 |
Участник
|
![]() Цитата:
Иногда требуется, чтобы значение, какого либо поля увеличивалось автоматически, например поле индекса, при вставке новой записи в таблицу, например в Grid control нажатием Ctrl+N. Так вот как это сделать…
Необходимо переопределить метод InitValue у таблицы, к которой хотелось бы добавить эту функциональность, следующим образом: public void initValue() { HB_Tutorial_Company company; super(); select maxof(ID) from company; this.ID = company.ID + 1; this.insert(); } Все бы хорошо, но при работе с другой таблицей HB_Tutorial_Employee, одно поле которой (CompanyID) связано (by relation) с полем HB_Tutorial_Company.ID, возникла следующая проблема. Была создана форма для отображения компаний и их сотрудников, при выборе в одном Grid control компании во втором выводились ее сотрудники, т.е. два Data Source и у того который относится к HB_Tutorial_Employee стоит joint source:HB_Tutorial_Company. К HB_Tutorial_Employee также была добавлена функция автоматического увеличения индекса. Так вот в чем проблема при вставке нескольких записей подряд проблем не возникает, но при вставке одной и тут же ее редактировании, даже просто понажимав enter, CompanyID правильно заполненный автоматом (ID текущей компании) сбрасывается в 0 или любое другое значение, если это поле проинициализировать в InitValue до инсерта. К счастью этого можно избежать, перенеся insert в метод InitValue Data Source’a относящегося к данной таблице. X++: public void initValue() { HB_Tutorial_Employee employeeCurrent = this.cursor(); HB_Tutorial_Employee employee; super(); select maxof(EmployeeID) from employee; employeeCurrent.EmployeeCurrent = employee.EmployeeID + 1; employeeCurrent.insert(); }
__________________
Гурьев Сергей |
|
Теги |
номерная серия |
|
|