07.12.2001, 21:09 | #1 |
Участник
|
Автоматическое увеличение индекса
X++: , InitValue . public void initValue() { HB_Tutorial_Company company; super(); select maxof(ID) from company; this.ID = company.ID + 1; }
__________________
Гурьев Сергей |
|
07.12.2001, 22:34 | #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 |
|
10.12.2001, 07:12 | #3 |
Участник
|
Для таких вещей предусмотрены нумераторы (номерные серии, NumberSequence).
Пользуйте их и не изобретайте велосипед. |
|
10.12.2001, 13:00 | #4 |
Продавец игрушек
|
Сергей, хотелось бы узнать подробнее о NumberSequence, но не смог найти где.
Может вкратце расскажешь?
__________________
С уважением, Роман Кошелев. |
|
10.12.2001, 23:19 | #5 |
Участник
|
1. В презентациях с форума DBD 2000. Презентации идут на партнерском диске.
2. В Best Practice - Number sequence framework. Очень коротко 3. Чуть-чуть есть в техничекой информации |
|
11.12.2001, 01:40 | #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(); }
__________________
Гурьев Сергей |
|
01.07.2004, 21:23 | #7 |
Участник
|
Цитата:
А вообще, лучше не вставляй вторую запись, пока полностью не заполнил первую
|
|
02.07.2004, 05:50 | #8 |
NavAx
|
сделать какое нить поле обязательным для заполнения
P.S. вот судя по шквалу вопросов вы яростно взялись программировать. Вы уверены что это вам нужно? Рекомендации лучших аксаптоведов гласят что "НЕ НУЖНО ПРОГРАММИРОВАТЬ". Подумайте над этим
__________________
И все они создания природы... |
|
02.07.2004, 14:23 | #9 |
Участник
|
Спасибо!
|
|
Теги |
номерная серия |
|
|