Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Из одной таблицы в другую  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 720
Что-то сегодня с погодой-что ли:))
Никак не могу найти красивое решение для задачи:
Есть две таблицы MAIN0 и MAIN1 одинаковой структуры( древесной)
Code - счетчик, ключ
own - указатель на код вышестоящей ноды(детали)
codever - указатель из справочника на саму деталь
......
lev - глубина в дереве
pthh - полный путь к вершине

составной ключ из OWN и CODEVER

Надо периодически из MAIN0 перебрасывать по несколько тысяч записей в MAIN1 с обязательным сохранением структуры дерева и не нарушая целостность ключа.
До чего додумался
Вполне можно добавить в MAIN1 еще пару полей, снять составной ключ, скопировать записи запросом( code и own при этом записать в добавленные поля ), пройтись через VBA по добавленному и правильно расставить OWN, вернуть обратно ключ . Ну не нравится совсем мне это.... коряво как да и не по феншую-ключами жонглировать
Второй путь - те же поля добавить ,отсортировать в рекордсете нужные к добавлению записи по LEV. Грузить по одному уровню сверху и после загрузки одного уровня пробегать по загруженному и заполнять OWN..... То же не очень нравится....

Может есть более красивое решение?
29 июн 20, 13:31    [22159023]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 720
Да, забыл дополнить - в этих таблицах по нескольку(по много) отдельных деревьев, каждое со своей вершиной.
Перебрасываться будет одно дерево целиком.
29 июн 20, 14:37    [22159086]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20482
Ну так и перекидываешь в цикле от корня, получая запросом новый код родительской ноды по её параметрам. Надеюсь, совокупности всех остальных полей, кроме кода и ссылки на родителя, достаточно для однозначной идентификации записи?
29 июн 20, 15:16    [22159118]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 1940
Serg197311
Может есть более красивое решение?

Да нет, при такой структуре, других решений (только перечитывать и переписывать)
Всему виной (поле Code ака счетчик).
29 июн 20, 15:21    [22159121]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
vmag
Member

Откуда: MP
Сообщений: 3655
Serg197311
Code - счетчик, ключ


Вот с этим вообще не понятно...
- если оно и там там значимый счетчик - то хоть застрелись, но оно должно писаться синхронно иначе не будет совпадать ни у деревьев, ни вообще (сама задача теряет смысл из-за ее не реализуемости)...
- Оно по крайней мере в одной из таблиц (куда пишут) не должно быть счетчиком, а должно быть тупо длинным целым, тогда можно получить точную копию среза (дерева)...
Ну и раз это не проблема:
Serg197311
Вполне можно добавить в MAIN1 еще пару полей

То в обе таблицы можно завести поле № Дерева, по которому можно будет отбирать все записи нужного дерева, особо не задумываясь, Ну а делать отдельную таблицу "Перечень Деревьев" или не делать зависит от целесообразности этого....
Зато удобно - ткнул в любую запись и можно:
1. сразу увидеть все дерево по № Дерева
2. копирнуть сразу все дерево одним запросом по № Дерева без всяких переборов и т.д.
29 июн 20, 21:33    [22159260]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20482
vmag
в обе таблицы можно завести поле № Дерева
Вот только непонятно, как при этом формировать условие контроля целостности... не оставлять же это на откуп клиентской логике.
29 июн 20, 21:35    [22159262]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
vmag
Member

Откуда: MP
Сообщений: 3655
Akina
как при этом формировать условие контроля целостности...


В этом нет необходимости - в копии будет точный срез дерева...
В оригинале - да, и нужно в интерфейс вводить понятие Дерево, а если его до сих пор там нет, то вообще не понятно как они работают...
Например номером дерева для всего дерева может быть значение Счетчика самого верхнего узла
29 июн 20, 21:48    [22159269]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
Predeclared
Member

Откуда: And God I know I'm one
Сообщений: 970
Serg197311
... Надо периодически из MAIN0 перебрасывать по несколько тысяч записей в MAIN1 с обязательным сохранением структуры дерева и не нарушая целостность ключа. ...

Что может послужить причиной нарушения целостности ключа?
Я что-то не догоняю, сори.

upd:
Смутно припоминается, что в версиях старше 2003 нельзя присваивать запросом значение счетчика. Оно?
29 июн 20, 22:03    [22159276]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20482
Predeclared
Что может послужить причиной нарушения целостности ключа?
Почему ключа-то? данных... ссылочная целостность в первую очередь.

Сообщение было отредактировано: 29 июн 20, 22:24
29 июн 20, 22:26    [22159288]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
vmag
Member

Откуда: MP
Сообщений: 3655
Вообще-то это стандартная задача обмена удаленных точек через сервер...
Одна сторона делает приход локально со счетчиком и отправляет данные на сервер, где счетчик ложится в длинное целое...
Вторая сторона ловит приход локально с сервера тоже в не счетчик, а расход делает локально со счетчиком
и отправляет расход в не счетчик на сервер...
Первая сторона ловит с сервера расход тоже в не счетчик и так в цикле...
Дерево тут как вспомогательный параметр для макро манипуляций и счетчики уже по барабану ибо изначально все решено с ними

Сообщение было отредактировано: 29 июн 20, 22:40
29 июн 20, 22:40    [22159295]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
Predeclared
Member

Откуда: And God I know I'm one
Сообщений: 970
Akina
... данных... ссылочная целостность в первую очередь.

А почему она должна нарушиться при копировании сверху вниз (включая значения счетчика, поле Code)?
29 июн 20, 22:44    [22159298]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
vmag
Member

Откуда: MP
Сообщений: 3655
Predeclared,

Да там же весь сыр-бор из за шахер - махер с этим счетчиком, сначала сбросить его в не счетчик, перебрать, записать, потом опять сказать что это таки счетчик...

Serg197311
снять составной ключ, скопировать записи запросом( code и own при этом записать в добавленные поля ), пройтись через VBA по добавленному и правильно расставить OWN, вернуть обратно ключ .
29 июн 20, 22:53    [22159300]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
vmag
Member

Откуда: MP
Сообщений: 3655
ну ясень пень, что если для корректировки БД нужно туда-сюда менять структуру БД, то это значит, что со структурой уже что-то не так...
29 июн 20, 22:56    [22159301]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6664
Serg197311

....Есть две таблицы MAIN0 и MAIN1 одинаковой структуры( древесной).....
С такой структурой Вы хотите создать БД. Удачи!
29 июн 20, 23:50    [22159316]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 1940
Serg197311,
Если есть желание подправить структуру базы.
То используйте в качестве ключа GUID.
(а Code пущай остается для "сурогатной" сортировки )

Преимущества:
1 Уникальность в рамках всей базы.
2 Спокойная генерация и вставка на стороне клиента.
3 Без проблемное слияние добавление данных.
4 Прекрасно подходит для деревьев.
Давно пользую очень доволен.
С уважением.
30 июн 20, 05:00    [22159372]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20482
Predeclared
А почему она должна нарушиться при копировании сверху вниз (включая значения счетчика, поле Code)?
Я не о копировании, а о целостности данных. Хотя и в текущем исполнении записать в таблицу кольцо - как нефиг делать... для поправки хотя бы части потенциальных проблем надо хранить не номер дерева (ну или код корня, что по факту одно и то же), а URL узла.
30 июн 20, 07:41    [22159398]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 1940
Serg197311
Может есть более красивое решение?

Используйте GUID и ничего править не надо будет.(Красиво будет)
30 июн 20, 08:26    [22159416]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
vmag
Member

Откуда: MP
Сообщений: 3655
Serg197311
Может есть более красивое решение?


Удалите MAIN1 и добавьте в таблицу MAIN0 галочку, если она есть на записи, то значит эта запись виртуально есть и в MAIN1
30 июн 20, 09:25    [22159445]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 720
sdku
Serg197311

....Есть две таблицы MAIN0 и MAIN1 одинаковой структуры( древесной).....
С такой структурой Вы хотите создать БД. Удачи!

Спасибо за пожелания.))
30 июн 20, 17:36    [22159869]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 720
vmag
То в обе таблицы можно завести поле № Дерева, .

Ну несомненно - это уже есть, номера деревьев для обоих таблиц одинаковые
vmag

Зато удобно - ткнул в любую запись и можно:

2. копирнуть сразу все дерево одним запросом по № Дерева без всяких переборов и т.д.

А вот как это сделать просто - тут и был вопрос. Не со счетчиком, а со структурой дерева.
Но думаю, мой путь номер 2 поможет без манипуляций с ключом
30 июн 20, 23:41    [22160019]     Ответить | Цитировать Сообщить модератору
 Re: Из одной таблицы в другую  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 720
vmag
- Оно по крайней мере в одной из таблиц (куда пишут) не должно быть счетчиком, а должно быть тупо длинным целым, тогда можно получить точную копию среза (дерева)...

А вот это уже может быть реальной идеей..... Буду ее обдумывать....
30 июн 20, 23:52    [22160022]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить