Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Порядок сохранения записей в ClientDataSet [D7, MS Access 2003]


Страницы:   1 2

Shura ©   (2007-05-03 15:57:00) 

Всем привет.

Подскажите, пожалуйста, есть ли возможность изменения порядка отправки записей из клиентского набора на сервер. Например, необходимо, чтобы все записи, в которых поле1 is NULL были отпралены в базу первыми, а затем все остальные.
После вызова ApplyUpdate срабатывает BeforeUpdateRecord, в котором есть DeltaDS, хранящий все измененные записи. Как поменять внутри DeltaDS порядок этих записей ?


Alexander 3   (2007-05-10 12:55:00) [1]

>PS что мешает пройтись по записям самому, а не через ApplyUpdates ?
Если можно пример кода как отправить изменения не через ApplyUpdates.
Было уже
Это клиентский набор изменения передаются через провайдер.


Карелин Артем   (2007-05-10 10:50:00) [2]


> Alexander3   (09.05.07 20:39) [21]

Берешь и ходишь по набору данных вперед-назад, выискивая ручками какой элемент ты должен сохранить после предыдущего записанного в базу и ручками его пишешь в таблицу.


Alexander3   (2007-05-09 20:39:00) [3]

Очень жаль что нет ответа по сабжу.
Для меня например тоже актуально
Пример такой
Есть документ

Мастер запись 1
Подчиненная (по смыслу ) мастер запись добавленна после Мастер запись 2
Мастер запись 2

После ApplyUpdate
Мастер запись 1
Мастер запись 2
Подчиненная (по смыслу ) мастер запись добавленна после Мастер запись 2

а хотелось бы видеть как было.
Теоретически можно добавить нумерацию и сортировать но есть перед глазами
приложение где это реализовано без всяких нумераций и даже в подчиненных записях
нет указаний на главные кроме того что у них общий  номер документа
они просто хранятся по порядку хотелось бы знать как это реализовать.


Shura   (2007-05-04 11:55:00) [4]

Так я выше проблему обрисовал. Переделывать логику не очень хотелось.


Johnmen   (2007-05-04 11:42:00) [5]

М.б. я чего-то не понял, но зачем плодить ещё CDS, если один уже есть? И достаточно просто реализовать нормальную логику?


Карелин Артем   (2007-05-04 10:41:00) [6]


> Shura ©   (04.05.07 10:07) [15]

Ты поля создай сначала, потом [16]


vovnuke   (2007-05-04 10:41:00) [7]

но надо предварительно структуру DataSet-а сформировать.


vovnuke   (2007-05-04 10:36:00) [8]

TmpCDS.CreateDataSet;


Shura   (2007-05-04 10:07:00) [9]

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.


Карелин Артем   (2007-05-04 09:23:00) [10]


> может кто подскажет как создать виртуальный набор данных
> ни к чему не привязанный.

Взять ни к чему не привязанный ClientDataSet )))


Shura   (2007-05-04 08:46:00) [11]

А все-таки интересно, где хранится последовательность изменений, которые отпраляются в базу и есть ли возможность этот порядок ручками поправить. Еще такая мысль была - создать временный DataSet, в него в нужном порядке запихнуть измененные записи и подменить им исходный DataSet. К сожалению не получилось, может кто подскажет как создать виртуальный набор данных ни к чему не привязанный.


clickmaker   (2007-05-03 17:38:00) [12]

ну как вариант, модифицировать базу при изменениях в структуре дерева.
Лишние движения, но плюсы тоже есть. Гарантия от потери полностью сформированной структуры при внезапном сбое, например.


Shura   (2007-05-03 17:24:00) [13]

Фишка в том, что я к дереву никак не привязан. А вот в ClientDataSet делаются изменения СРАЗУ и потом в том же порядке отправляются в базу. Не очень хочется алгоритм переделывать, но похоже придется. Сначала строим дерево, а потом на его основе меняем базу добавляем, изменяем. Жуть.


clickmaker   (2007-05-03 17:14:00) [14]


> Мышкой тащим запись1 и подчиняем ее записи2. Теперь если
> попытаться сохранить изменения, то первой в базу пойдет
> запись1, как первая добавленная, а затем запись2

ну а нельзя пробежатся вверх по убыванию уровня от записи1, чтобы воссоздать родительские ветви, если их еще нет?
Ну то есть фактически дойти до самого верхнего дедушки и от него - вниз, создать родительскую цепочку, а потом уже запись1?
По аналогии с созданием дерева папок при копирование файла в новое место


Shura   (2007-05-03 17:04:00) [15]


> как это? как добавить дочерний, не имея родителя?

Имеется 2 списка: слева - общий, справа - дерево. Вправо добавляем несколько записей, а затем мышкой их ставим как надо. При этом каждое действие - добавить запись, переподчинить ее в дереве - это операция Insert, Edit, Post. Дальше проблема возникает вот когда. Добавляем по порядку 2 записи в дерево: запись1 и запись2. Мышкой тащим запись1 и подчиняем ее записи2. Теперь если попытаться сохранить изменения, то первой в базу пойдет запись1, как первая добавленная, а затем запись2. Но у записи1 уже есть ссылка на родителя - запись2, которая в базе пока отсутствует. Во как.


clickmaker   (2007-05-03 16:54:00) [16]


> первая добавленная в дерево запись может быть не родительским
> узлом, а дочерним

как это? как добавить дочерний, не имея родителя?


Shura   (2007-05-03 16:32:00) [17]

>NULL до редактирования или после?
NULL после редактирования

>PS что мешает пройтись по записям самому, а не через ApplyUpdates ?
Если можно пример кода как отправить изменения не через ApplyUpdates.

>зачем это делать перед отправкой на сервер?
Потому что сначала заносятся в базу родительские записи, а потом те, которые на них ссылаются.

Задача простая: пользователь на экране формирует дерево в ListView (мышкой перетаскивает узлы) не важно чего - работников, товаров и т. д. А потом, сформировав его нажимает "Сохранить". Дерево должно корректно сохраниться в базе. Записи, как я понял, отправляются в базу в порядке их изменения, но первая добавленная в дерево запись может быть не родительским узлом, а дочерним. Тогда получается ошибка - попытка добавить в базу первую добавленную запись, у которой задан родитель еще не описанный в базе.


clickmaker   (2007-05-03 16:20:00) [18]


> изменить порядок записей в ClientDataSet'e

зачем это делать перед отправкой на сервер?


Desdechado   (2007-05-03 16:17:00) [19]

> в которых поле1 is NULL были отпралены в базу первыми, а затем все остальные.
NULL до редактирования или после?

PS что мешает пройтись по записям самому, а не через ApplyUpdates ?


Shura   (2007-05-03 16:07:00) [20]

Может и странная, но все-таки есть возможность изменить порядок записей в ClientDataSet'e ? Индексы пробовал - не помогает.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо