Форум: "Базы";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];
ВнизПорядок сохранения записей в ClientDataSet Найти похожие ветки
← →
Shura © (2007-05-03 15:57) [0]Всем привет.
Подскажите, пожалуйста, есть ли возможность изменения порядка отправки записей из клиентского набора на сервер. Например, необходимо, чтобы все записи, в которых поле1 is NULL были отпралены в базу первыми, а затем все остальные.
После вызова ApplyUpdate срабатывает BeforeUpdateRecord, в котором есть DeltaDS, хранящий все измененные записи. Как поменять внутри DeltaDS порядок этих записей ?
← →
Правильный Вася (2007-05-03 15:59) [1]странная какая-то задача
← →
clickmaker © (2007-05-03 16:01) [2]зачем?
← →
Ega23 © (2007-05-03 16:02) [3]Отсортировать?
← →
Shura © (2007-05-03 16:07) [4]Может и странная, но все-таки есть возможность изменить порядок записей в ClientDataSet"e ? Индексы пробовал - не помогает.
← →
Desdechado © (2007-05-03 16:17) [5]> в которых поле1 is NULL были отпралены в базу первыми, а затем все остальные.
NULL до редактирования или после?
PS что мешает пройтись по записям самому, а не через ApplyUpdates ?
← →
clickmaker © (2007-05-03 16:20) [6]
> изменить порядок записей в ClientDataSet"e
зачем это делать перед отправкой на сервер?
← →
Shura © (2007-05-03 16:32) [7]>NULL до редактирования или после?
NULL после редактирования
>PS что мешает пройтись по записям самому, а не через ApplyUpdates ?
Если можно пример кода как отправить изменения не через ApplyUpdates.
>зачем это делать перед отправкой на сервер?
Потому что сначала заносятся в базу родительские записи, а потом те, которые на них ссылаются.
Задача простая: пользователь на экране формирует дерево в ListView (мышкой перетаскивает узлы) не важно чего - работников, товаров и т. д. А потом, сформировав его нажимает "Сохранить". Дерево должно корректно сохраниться в базе. Записи, как я понял, отправляются в базу в порядке их изменения, но первая добавленная в дерево запись может быть не родительским узлом, а дочерним. Тогда получается ошибка - попытка добавить в базу первую добавленную запись, у которой задан родитель еще не описанный в базе.
← →
clickmaker © (2007-05-03 16:54) [8]
> первая добавленная в дерево запись может быть не родительским
> узлом, а дочерним
как это? как добавить дочерний, не имея родителя?
← →
Shura © (2007-05-03 17:04) [9]
> как это? как добавить дочерний, не имея родителя?
Имеется 2 списка: слева - общий, справа - дерево. Вправо добавляем несколько записей, а затем мышкой их ставим как надо. При этом каждое действие - добавить запись, переподчинить ее в дереве - это операция Insert, Edit, Post. Дальше проблема возникает вот когда. Добавляем по порядку 2 записи в дерево: запись1 и запись2. Мышкой тащим запись1 и подчиняем ее записи2. Теперь если попытаться сохранить изменения, то первой в базу пойдет запись1, как первая добавленная, а затем запись2. Но у записи1 уже есть ссылка на родителя - запись2, которая в базе пока отсутствует. Во как.
← →
clickmaker © (2007-05-03 17:14) [10]
> Мышкой тащим запись1 и подчиняем ее записи2. Теперь если
> попытаться сохранить изменения, то первой в базу пойдет
> запись1, как первая добавленная, а затем запись2
ну а нельзя пробежатся вверх по убыванию уровня от записи1, чтобы воссоздать родительские ветви, если их еще нет?
Ну то есть фактически дойти до самого верхнего дедушки и от него - вниз, создать родительскую цепочку, а потом уже запись1?
По аналогии с созданием дерева папок при копирование файла в новое место
← →
Shura © (2007-05-03 17:24) [11]Фишка в том, что я к дереву никак не привязан. А вот в ClientDataSet делаются изменения СРАЗУ и потом в том же порядке отправляются в базу. Не очень хочется алгоритм переделывать, но похоже придется. Сначала строим дерево, а потом на его основе меняем базу добавляем, изменяем. Жуть.
← →
clickmaker © (2007-05-03 17:38) [12]ну как вариант, модифицировать базу при изменениях в структуре дерева.
Лишние движения, но плюсы тоже есть. Гарантия от потери полностью сформированной структуры при внезапном сбое, например.
← →
Shura © (2007-05-04 08:46) [13]А все-таки интересно, где хранится последовательность изменений, которые отпраляются в базу и есть ли возможность этот порядок ручками поправить. Еще такая мысль была - создать временный DataSet, в него в нужном порядке запихнуть измененные записи и подменить им исходный DataSet. К сожалению не получилось, может кто подскажет как создать виртуальный набор данных ни к чему не привязанный.
← →
Карелин Артем © (2007-05-04 09:23) [14]
> может кто подскажет как создать виртуальный набор данных
> ни к чему не привязанный.
Взять ни к чему не привязанный ClientDataSet )))
← →
Shura © (2007-05-04 10:07) [15]
procedure TDM.dsp1BeforeUpdateRecord(Sender: TObject; SourceDS: TDataSet;
DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; var Applied: Boolean);
var TmpCDS : TCustomClientDataSet;
begin
TmpCDS:=TCustomClientDataSet.Create(nil);
TmpCDS.Open;
TmpCDS.InsertRecord([]);
TmpCDS.Free;
end;
При попытке выполнить TmpCDS.Open выдает ошибку Missing provider or data packet.
← →
vovnuke © (2007-05-04 10:36) [16]TmpCDS.CreateDataSet;
← →
vovnuke © (2007-05-04 10:41) [17]но надо предварительно структуру DataSet-а сформировать.
← →
Карелин Артем © (2007-05-04 10:41) [18]
> Shura © (04.05.07 10:07) [15]
Ты поля создай сначала, потом [16]
← →
Johnmen © (2007-05-04 11:42) [19]М.б. я чего-то не понял, но зачем плодить ещё CDS, если один уже есть? И достаточно просто реализовать нормальную логику?
← →
Shura © (2007-05-04 11:55) [20]Так я выше проблему обрисовал. Переделывать логику не очень хотелось.
← →
Alexander3 (2007-05-09 20:39) [21]Очень жаль что нет ответа по сабжу.
Для меня например тоже актуально
Пример такой
Есть документ
Мастер запись 1
Подчиненная (по смыслу ) мастер запись добавленна после Мастер запись 2
Мастер запись 2
После ApplyUpdate
Мастер запись 1
Мастер запись 2
Подчиненная (по смыслу ) мастер запись добавленна после Мастер запись 2
а хотелось бы видеть как было.
Теоретически можно добавить нумерацию и сортировать но есть перед глазами
приложение где это реализовано без всяких нумераций и даже в подчиненных записях
нет указаний на главные кроме того что у них общий номер документа
они просто хранятся по порядку хотелось бы знать как это реализовать.
← →
Карелин Артем © (2007-05-10 10:50) [22]
> Alexander3 (09.05.07 20:39) [21]
Берешь и ходишь по набору данных вперед-назад, выискивая ручками какой элемент ты должен сохранить после предыдущего записанного в базу и ручками его пишешь в таблицу.
← →
Alexander 3 (2007-05-10 12:55) [23]>PS что мешает пройтись по записям самому, а не через ApplyUpdates ?
Если можно пример кода как отправить изменения не через ApplyUpdates.
Было уже
Это клиентский набор изменения передаются через провайдер.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.042 c