Вверх ↑
Ответов: 262
Рейтинг: 6
#1: 2006-10-02 06:54:51 ЛС | профиль | цитата
Dilma, "позиция может быть 0" - однако в elements.db нет ни одной записи в которой pos=0. ни в таблице elements ни в groups, что однако непонятно, если минимальная позиция =0 тогда почему во всех вкладках pos начинается с 1? Нолик про запас чтоль оставлен ?
Соответственно если я сейчас перемещу первый элемент (pos=1) вверх, и его pos станет равной 0, то образуется разрыв позиций. SELECT pos FROM elements WHERE tab=1 ORDER BY pos даст результат: 0,2,3,4,5... что в принципе не хорошо. Зачем порождать хаос. Тут или таблицу пересобрать или принять "волевое решение" ;) что MIN(pos)=1.

[size=-2]------ Добавлено в 06:54
По этой же причине следует в elmen.dpr
procedure DeleteElement(name:PChar); stdcall;
begin
exec('delete from elements where id = ''' + name + '''');
end;
изменить на
procedure DeleteElement(name:PChar); stdcall;
Var r: pointer;
tab,pos:integer;
begin
r := query('select tab,pos from elements where id = ''' + name+ '''');
sqlite3_step(r);
tab := sqlite3_column_int(r,0);
pos := sqlite3_column_int(r,1);
sqlite3_finalize(r);
exec('delete from elements where id = ''' + name + '''');
exec('UPDATE elements SET pos=pos-1 WHERE pos>'+Int2Str(Pos)+' and tab='+Int2Str(tab));
end;
т.е. уменьшить позицию всех элементов во вкладке после удаленного.
карма: 0

0