![]() |
#1 |
Участник
|
![]() X++: , InitValue . public void initValue() { HB_Tutorial_Company company; super(); select maxof(ID) from company; this.ID = company.ID + 1; }
__________________
Гурьев Сергей |
|
![]() |
#2 |
Administrator
|
RE: Автоматическое увеличение индекса
Дело в том, что когда ты вставляешь новую запись используя стандартные функции, вызывается только метод initValue. Метод insert, вставляющий запись в таблицу физически (а не в буфер), не вызывается.
Попробуй вставить insert в initValue, но это может привести к дополнительным проблемам. Например, запись может не вставится, т. к. заполнены не все необходимые поля (такими являются поля со свойством Mandatory и поля, включенные в индексы). А вообще, лучше не вставляй вторую запись, пока полностью не заполнил первую ![]()
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
![]() |
#3 |
Участник
|
Для таких вещей предусмотрены нумераторы (номерные серии, NumberSequence).
Пользуйте их и не изобретайте велосипед. |
|
![]() |
#4 |
Продавец игрушек
|
![]()
Сергей, хотелось бы узнать подробнее о NumberSequence, но не смог найти где.
Может вкратце расскажешь?
__________________
С уважением, Роман Кошелев. |
|
![]() |
#5 |
Участник
|
1. В презентациях с форума DBD 2000. Презентации идут на партнерском диске.
2. В Best Practice - Number sequence framework. Очень коротко 3. Чуть-чуть есть в техничекой информации |
|
![]() |
#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(); }
__________________
Гурьев Сергей |
|
![]() |
#7 |
Участник
|
Цитата:
А вообще, лучше не вставляй вторую запись, пока полностью не заполнил первую
|
|
![]() |
#8 |
NavAx
|
сделать какое нить поле обязательным для заполнения
![]() P.S. вот судя по шквалу вопросов вы яростно взялись программировать. Вы уверены что это вам нужно? Рекомендации лучших аксаптоведов гласят что "НЕ НУЖНО ПРОГРАММИРОВАТЬ". Подумайте над этим ![]()
__________________
И все они создания природы... |
|
![]() |
#9 |
Участник
|
Спасибо!
|
|
Теги |
номерная серия |
|
|