Relations | |
---|---|
DmitryKn Автор Сообщений: 268 Дата регистрации: 06.04.2022 |
Доброго дня.
1. В БД установлены "постоянные связи" и RI Restrict для таблиц, one-to-many В форме, которая с таблицами работает, в Data Environment было установлено Relation , и , насколько я понял из статей, это "временная связь", и вот в ней OneToMany = .f. Если есть связь в БД, то нужна ли связь в DE, и нужно ли исправлять onetomany = .t. , они вообще одно и тоже или две разных связи и мешают друг другу? 2. И еще вопрос, если в связанных таблицах с отношением один-ко-многим в родительской курсор стоит на записи, в дочерней курсор устанавливается именно на первую запись с этим ключом, или на любую попавшуюся из записей с таким ключом? 3. Если мы команду =seek(id,'table','table.id') даем, и записей с table.id = id несколько, то курсор встанет именно на первую (если можно так выразиться - первую "сверху") или опять-таки на какую-то? Надо ли мне предварительно в дочерней таблице курсор вверх загонять? ![]() |
Re: Relations | |
---|---|
PaulWist Сообщений: 14431 Дата регистрации: 01.04.2004 |
Нет. "Постоянная связь" нужна для поддержания ссылочной целостности (логической целостности) БД. "Временная связь" обычно используется для отображения в интерфейсе (тут меня поправят, не использую лет 30-ть ![]() То есть, это две разные сущности никак не связанные друг с другом.
На любую попавшуюся, хотя кажется, что всегда на "первую".
Встанет на ту которая в этот момент находится в памяти. Первая сверху, не всегда одна и та же запись, например если удалить "первую сверху", то первой станет уже другая запись. ![]() ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
Re: Relations | |
---|---|
DmitryKn Автор Сообщений: 268 Дата регистрации: 06.04.2022 |
Я имел ввиду, перед редактированием дочерней таблицы, туда вносятся данные из вью с помощью SCAN, вот нужно ли ее сортировать по ключу и загнать курсор вверх, предварительно? Или при перемещении курсора на строку в главной, в дочерней записи отбираются, а курсор встанет автоматически на "верхней" строке? Исправлено 1 раз(а). Последнее : DmitryKn, 22.02.23 13:36 ![]() |
Re: Relations | |
---|---|
akvvohinc Сообщений: 3916 Откуда: Москва Дата регистрации: 11.11.2008 |
В дочерней таблице текущей записью всегда будет та, которую вы назвали "первой".
При этом "первая" - с учетом текущего тега, а не физического порядка. Это касается и функции SEEK(), и SET RELATION. Цитата:Быстрее самому это проверить, чем ждать ответа. ![]() Исправлено 1 раз(а). Последнее : akvvohinc, 22.02.23 13:52 ![]() |
Re: Relations | |
---|---|
akvvohinc Сообщений: 3916 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Непонятно. Дочерняя таблица уже имеет установленный нужный тег. Впрочем, мне вообще не совсем понятно, что подразумевается под "сортировать по ключу". Какая команда имеется в виду? ![]() |
Re: Relations | |
---|---|
DmitryKn Автор Сообщений: 268 Дата регистрации: 06.04.2022 |
т.е. при установке курсора на строку в главной table1 с примари ключом id это будет тождественно:
если возможен гипотетический случай, что "встанет в верхней строке" - в большинстве случаев, но это не точно , то как я проверю? Исправлено 1 раз(а). Последнее : DmitryKn, 22.02.23 14:00 ![]() |
Re: Relations | |
---|---|
DmitryKn Автор Сообщений: 268 Дата регистрации: 06.04.2022 |
имел ввиду - отобрать записи с нужным значением ключа и загнать курсор вверх, как в моем посте выше. ![]() |
Re: Relations | |
---|---|
akvvohinc Сообщений: 3916 Откуда: Москва Дата регистрации: 11.11.2008 |
Не проверял. Но могу лишь повторить, что перемещаясь по родительской таблице и имея установленную связь или используя функцию SEEK(), в дочерней таблице текущей записью будет та, которая была бы выше, если бы вы просто листали дочернюю таблицу с тем же установленным тегом, с той же опцией ASCENDING/DESCENDING и тем же фильтром. Цитата:Никак. Доказывать, что барабашка существует должен тот, кто это утверждает. ![]() Вы доказать обратное не сможете в принципе - проведите хоть миллион опытов. ![]() |
Re: Relations | |
---|---|
akvvohinc Сообщений: 3916 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Что-то я уже запутался - то SET RELATION со SET SKIP, то SEEK(), то SET FILTER. Опишите саму задачу. Если вам просто требуется "собрать в кучку" все записи дочерней таблицы, соответствующие какой-то записи родительской, и вы не хотите пользоваться командой SELECT SQL, то при установленном нужном теге в таблице child:
![]() |
Re: Relations | |
---|---|
DmitryKn Автор Сообщений: 268 Дата регистрации: 06.04.2022 |
Прошу извинить, если путанно излагаю. Есть relations между таблицами один-ко-многим. Хотел спросить у уважаемого сообщества действительно ли при установке курсора на запись в родительской с каким-то значением ключа, в дочерней курсор автоматически будет установлен в "верхней" записи диапазона с совпадающими значениями ключа. Или может встать на любой строке из этого диапазона произвольно. ![]() |
Re: Relations | |
---|---|
PaulWist Сообщений: 14431 Дата регистрации: 01.04.2004 |
Для чего это знание, какую задачу пытаетесь решить?
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
Re: Relations | |
---|---|
akvvohinc Сообщений: 3916 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Я никогда в жизни не использовал DE, но, полагаю, что все способы по работе с парой "родитель-ребёнок" построены в Фоксе по одной "схеме" - при движении по родителю, в дочерней таблице текущей всегда становится "первая" запись соответствующего диапазона. ![]() |
Re: Relations | |
---|---|
DmitryKn Автор Сообщений: 268 Дата регистрации: 06.04.2022 |
пытаюсь анализировать свой код сохранения данных, ищу ошибку.
На каком-то этапе теряю информацию (это ошибка не постоянная, бывает изредка, самостоятельно на своем рабочем месте вызвать ее не могу, но у пользователя видел своими глазами, помимо жалоб). Ранее мы ситуацию уже с вами обсуждали, когда я ввел в код транзакции , и RI restrict по вашему совету. Коротко напомню - данные готовятся во вью, потом переносятся в таблицу. Вью заполнен - это мы видим в гриде формы. В ходе сохранения выполняется tablupdate вью, потом scan, и insert или replace построчно в таблицу, потом соответственно, tablupdate таблиц, и то и другое в транзакции. Транзакции ошибок не дают. Буферизация вью 3 , таблиц - 5. После сохранения бывает случаи, когда этих записей в таблице нет, т.е. туда ничего не попало. Это может произойти несколько раз подряд, потом эти же данные совершенно корректно сохраняются. Т.е. ошибка типа "пропустил какое-то поле" исключена. Вот пытаюсь осознанно перебрать весь этот гребаный код, что бы понять, где все же "что-то не то". ![]() |
Re: Relations | |
---|---|
DmitryKn Автор Сообщений: 268 Дата регистрации: 06.04.2022 |
я так тоже полагал, но четкого определения нигде не прочитал, хотел убедиться наверняка. ![]() |
Re: Relations | |
---|---|
PaulWist Сообщений: 14431 Дата регистрации: 01.04.2004 |
Анализируется, что возвращает ф-ия TableUpdate()? ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
Re: Relations | |
---|---|
akvvohinc Сообщений: 3916 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:В Help по команде SET SKIP написано, на мой взгляд, достаточно чётко: Цитата: Исправлено 1 раз(а). Последнее : akvvohinc, 22.02.23 17:24 ![]() |
Re: Relations | |
---|---|
DmitryKn Автор Сообщений: 268 Дата регистрации: 06.04.2022 |
ну да
Исправлено 1 раз(а). Последнее : DmitryKn, 22.02.23 18:01 ![]() |
Re: Relations | |
---|---|
PaulWist Сообщений: 14431 Дата регистрации: 01.04.2004 |
Вместо loop надо exist, в приведенном коде при возникновении ошибки, не выходтся из цикла, презод идет на следующую таблицу.
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
Re: Relations | |
---|---|
DmitryKn Автор Сообщений: 268 Дата регистрации: 06.04.2022 |
Спасибо, поправлю. В таком случае, даже если ошибка была, она могла затереться следующей таблицей ( Исправлено 1 раз(а). Последнее : DmitryKn, 22.02.23 19:32 ![]() |
Re: Relations | |
---|---|
PaulWist Сообщений: 14431 Дата регистрации: 01.04.2004 |
Конечно, и ошибку можно было отловить, если она произошла на "последней таблице." ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
© 2000-2023 Fox Club  |