|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Что-то сегодня с погодой-что ли:)) Никак не могу найти красивое решение для задачи: Есть две таблицы MAIN0 и MAIN1 одинаковой структуры( древесной) Code - счетчик, ключ own - указатель на код вышестоящей ноды(детали) codever - указатель из справочника на саму деталь ...... lev - глубина в дереве pthh - полный путь к вершине составной ключ из OWN и CODEVER Надо периодически из MAIN0 перебрасывать по несколько тысяч записей в MAIN1 с обязательным сохранением структуры дерева и не нарушая целостность ключа. До чего додумался Вполне можно добавить в MAIN1 еще пару полей, снять составной ключ, скопировать записи запросом( code и own при этом записать в добавленные поля ), пройтись через VBA по добавленному и правильно расставить OWN, вернуть обратно ключ . Ну не нравится совсем мне это.... коряво как да и не по феншую-ключами жонглировать Второй путь - те же поля добавить ,отсортировать в рекордсете нужные к добавлению записи по LEV. Грузить по одному уровню сверху и после загрузки одного уровня пробегать по загруженному и заполнять OWN..... То же не очень нравится.... Может есть более красивое решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 13:31 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Да, забыл дополнить - в этих таблицах по нескольку(по много) отдельных деревьев, каждое со своей вершиной. Перебрасываться будет одно дерево целиком. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 14:37 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Ну так и перекидываешь в цикле от корня, получая запросом новый код родительской ноды по её параметрам. Надеюсь, совокупности всех остальных полей, кроме кода и ссылки на родителя, достаточно для однозначной идентификации записи? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 15:16 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Serg197311 Может есть более красивое решение? Да нет, при такой структуре, других решений (только перечитывать и переписывать) Всему виной (поле Code ака счетчик). ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 15:21 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Serg197311 Code - счетчик, ключ Вот с этим вообще не понятно... - если оно и там там значимый счетчик - то хоть застрелись, но оно должно писаться синхронно иначе не будет совпадать ни у деревьев, ни вообще (сама задача теряет смысл из-за ее не реализуемости)... - Оно по крайней мере в одной из таблиц (куда пишут) не должно быть счетчиком, а должно быть тупо длинным целым, тогда можно получить точную копию среза (дерева)... Ну и раз это не проблема: Serg197311 Вполне можно добавить в MAIN1 еще пару полей То в обе таблицы можно завести поле № Дерева, по которому можно будет отбирать все записи нужного дерева, особо не задумываясь, Ну а делать отдельную таблицу "Перечень Деревьев" или не делать зависит от целесообразности этого.... Зато удобно - ткнул в любую запись и можно: 1. сразу увидеть все дерево по № Дерева 2. копирнуть сразу все дерево одним запросом по № Дерева без всяких переборов и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 21:33 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
vmag в обе таблицы можно завести поле № Дерева ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 21:35 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Akina как при этом формировать условие контроля целостности... В этом нет необходимости - в копии будет точный срез дерева... В оригинале - да, и нужно в интерфейс вводить понятие Дерево, а если его до сих пор там нет, то вообще не понятно как они работают... Например номером дерева для всего дерева может быть значение Счетчика самого верхнего узла ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 21:48 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Serg197311 ... Надо периодически из MAIN0 перебрасывать по несколько тысяч записей в MAIN1 с обязательным сохранением структуры дерева и не нарушая целостность ключа. ... Что может послужить причиной нарушения целостности ключа? Я что-то не догоняю, сори. upd: Смутно припоминается, что в версиях старше 2003 нельзя присваивать запросом значение счетчика. Оно? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 22:03 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Predeclared Что может послужить причиной нарушения целостности ключа? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 22:26 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Вообще-то это стандартная задача обмена удаленных точек через сервер... Одна сторона делает приход локально со счетчиком и отправляет данные на сервер, где счетчик ложится в длинное целое... Вторая сторона ловит приход локально с сервера тоже в не счетчик, а расход делает локально со счетчиком и отправляет расход в не счетчик на сервер... Первая сторона ловит с сервера расход тоже в не счетчик и так в цикле... Дерево тут как вспомогательный параметр для макро манипуляций и счетчики уже по барабану ибо изначально все решено с ними ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 22:40 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Akina ... данных... ссылочная целостность в первую очередь. А почему она должна нарушиться при копировании сверху вниз (включая значения счетчика, поле Code)? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 22:44 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Predeclared, Да там же весь сыр-бор из за шахер - махер с этим счетчиком, сначала сбросить его в не счетчик, перебрать, записать, потом опять сказать что это таки счетчик... Serg197311 снять составной ключ, скопировать записи запросом( code и own при этом записать в добавленные поля ), пройтись через VBA по добавленному и правильно расставить OWN, вернуть обратно ключ . ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 22:53 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
ну ясень пень, что если для корректировки БД нужно туда-сюда менять структуру БД, то это значит, что со структурой уже что-то не так... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 22:56 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Serg197311 ....Есть две таблицы MAIN0 и MAIN1 одинаковой структуры ( древесной)..... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 23:50 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Serg197311, Если есть желание подправить структуру базы. То используйте в качестве ключа GUID. (а Code пущай остается для "сурогатной" сортировки ) Преимущества: 1 Уникальность в рамках всей базы. 2 Спокойная генерация и вставка на стороне клиента. 3 Без проблемное слияние добавление данных. 4 Прекрасно подходит для деревьев. Давно пользую очень доволен. С уважением. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 05:00 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Predeclared А почему она должна нарушиться при копировании сверху вниз (включая значения счетчика, поле Code)? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 07:41 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Serg197311 Может есть более красивое решение? Используйте GUID и ничего править не надо будет.(Красиво будет) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 08:26 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Serg197311 Может есть более красивое решение? Удалите MAIN1 и добавьте в таблицу MAIN0 галочку, если она есть на записи, то значит эта запись виртуально есть и в MAIN1 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 09:25 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
sdku Serg197311 ....Есть две таблицы MAIN0 и MAIN1 одинаковой структуры ( древесной)..... Спасибо за пожелания.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 17:36 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
vmag То в обе таблицы можно завести поле № Дерева, . Ну несомненно - это уже есть, номера деревьев для обоих таблиц одинаковые vmag Зато удобно - ткнул в любую запись и можно: 2. копирнуть сразу все дерево одним запросом по № Дерева без всяких переборов и т.д. А вот как это сделать просто - тут и был вопрос. Не со счетчиком, а со структурой дерева. Но думаю, мой путь номер 2 поможет без манипуляций с ключом ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 23:41 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
vmag - Оно по крайней мере в одной из таблиц (куда пишут) не должно быть счетчиком, а должно быть тупо длинным целым, тогда можно получить точную копию среза (дерева)... А вот это уже может быть реальной идеей..... Буду ее обдумывать.... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 23:52 |
|
Из одной таблицы в другую
|
|||
---|---|---|---|
#18+
Serg197311 Второй путь - те же поля добавить ,отсортировать в рекордсете нужные к добавлению записи по LEV. Грузить по одному уровню сверху и после загрузки одного уровня пробегать по загруженному и заполнять OWN..... На всякий случай сообщаю - этот путь работает, по нему и пойду ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2020, 08:49 |
|
|
start [/forum/topic.php?fid=45&fpage=15&tid=1610015]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 287ms |
total: | 429ms |
0 / 0 |