uranic2
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору hobest Цитата:| У такого решения есть одна проблема: необходимо знать значение нового идентификатора, а без обращения к базе никак его не получить. К тому же есть еще проблема, в многопользовательском режиме не совсем ясно, даже при обращении к базе, как его получить. | Это зависит от того какая у тебя база и что у тебя за идентификатор В БД в которых есть sequnce (Oracle, Interbase (Firebird) и т.п.) , берем следующее значение из этого sequence. Изпользовать max - потенциальный сточник граблей при многопользовательской работе. Вот тут поднял проект - как раз добавление в дереве как потомок если установлено FAsChild:=True. Соответсвенно на датасет вешается два обработчика var FAsChild: boolean; // для добавления деревьев procedure TdmMain.fdsTreeBeforeInsert(DataSet: TDataSet); begin IF DataSet.REcordCount<>0 then begin FID_Tree:= DataSet.FieldValues['ID']; if not DataSet.FieldByName('ID_PARENT').IsNull then FID_PARENT:=DataSet.FieldValues['ID_PARENT'] else FID_PARENT:=0; end else begin FID_TREE:= 0; FID_PARENT:=0; end; end; //------------------------------------------------------------------------------ procedure TdmMain.fdsTreeNewRecord(DataSet: TDataSet); begin if FAsChild then begin if FID_TRee<>0 then DataSet.FieldValues['ID_PARENT']:=FID_TREE; end else if FID_PARENT<>0 then DataSet.FieldValues['ID_PARENT'] := FID_PARENT; end; Добавлено: hobest Цитата:| К тому же есть еще проблема, в многопользовательском режиме не совсем ясно, даже при обращении к базе, как его получить. | Для MSSQL тоже можно извернуться и получить значение identy, но здесь врать не буду, потому как не помню. На крайний случай всегда можно испольовать GUID |