Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Вот еще вопрос ... Подкиньте идейку !  [new]
VFP7
Guest
Иногда возникает необходимость отображать содержимое связанных по "SET RELATION TO ..." free-файлов не через Grid, а через Controll'ы, отображающие содержимое полей только ОДНОЙ (текущей) записи. При этом весьма удобно, если пользователь видит в одном из Controll'ов формы текущую позицию (в дочернем файле) в виде "n/k", где k - количество дочерних записей, соответствующих текущему значению связующего индекса главного dbf-файла, а n - порядковый номер ОЧЕРЕДНОЙ из этих "соответствующих" записей. Я обычно для этого "насильно" добавляю в каждый дочерний файл числовые поля N и K, значения которых перевычисляю каждый раз в методе INIT() запускаемой формы. Значения этих полей соответственно корректируются при вставке и удалении записей. Сами эти поля я связываю со свойствами ControlSource соответствующих "индикаторных" Controll'ов формы.
Но, дело в том, что я и сам нахожу этот метод отслеживания текущей позиции в дочерних файлах несколько неуклюжим. Можно было бы попытаться обеспечить это полностью арифметическими методами отслеживания текущей позиции (без привлечения вспомогательных полей N и K), но при этом трудно обеспечить соответствие отображаемых значений при добавлении и удалении записей, а тем более - при непредвиденных сбоях в работе системы, не говоря уже о случаях с БОЛЬШИМ количеством записей в отображаемых файлах.
Может, кто-нибудь сталкивался с подобной проблемой? Как вы ее решаете? Подкиньте идейку, плиз :)
18 май 07, 23:06    [4158627]     Ответить | Цитировать Сообщить модератору
 Re: Вот еще вопрос ... Подкиньте идейку !  [new]
Dima T
Member

Откуда:
Сообщений: 15282
Ничего не понятно. Пример приведи

Ты записи в табличной части нумеруешь по порядку при вводе? А зачем это надо? Никогда над этим не заморачивался, при выводе в отчете проставил 1,2,3 ... и достаточно, а зачем эту нумерацию хранить?
А если хранишь, то зачем в Init() каждый раз перепроверять и пересчитывать?
Опять же, если можно расчитать, то зачем хранить?
19 май 07, 11:20    [4159272]     Ответить | Цитировать Сообщить модератору
 Re: Вот еще вопрос ... Подкиньте идейку !  [new]
VFP7
Guest
Вот прилагаю пример в архиве. Разархивировать надо в C:\111\, чтобы рисунки на кнопках отображались (издержка демо, простите). То, о чем я спрашиваю, отображается в оранжевых TextBox'ах.

К сообщению приложен файл (111.rar - 7Kb) cкачать
19 май 07, 14:34    [4159500]     Ответить | Цитировать Сообщить модератору
 Re: Вот еще вопрос ... Подкиньте идейку !  [new]
Redrik
Member

Откуда:
Сообщений: 808
Сорри, что не совсем в тему (идею так и не "прохавал"), но зачем держать в таблице поле "DR"?
Ну и "memo" не совсем хорошо для ФИО...
P.S. 2881006383 - это на самом деле не "Сидоров", а "СидоровА"! ;-)
19 май 07, 18:33    [4159730]     Ответить | Цитировать Сообщить модератору
 Re: Вот еще вопрос ... Подкиньте идейку !  [new]
VFP7
Guest
To Redrik:
Да будет вам! Сказано же - это только вырезка для демонстрации, и не более того. Поля, их форматы и содержимое сформированы только для примера. Я здесь на форуме уже приводил под членским ником свои функции преобразования кода в дату рождения, так что - плавали, знаем :)) И изобличение пола по коду там тоже обсуждалось. Ваш ответ, действительно не в тему.
А если не козырять НЕтематической осведомленностью, то ответ требуется примерно следующий:
нужна идея для более "уклюжего" механизма отслеживания и отображения текущего положения в дочерней таблице, чем через ее вспомогательные поля N и K. В контейнере баз данных это можно было бы возложить на хранимые процедуры, но в данном случае речь идет именно о свободных таблицах.
19 май 07, 19:17    [4159757]     Ответить | Цитировать Сообщить модератору
 Re: Вот еще вопрос ... Подкиньте идейку !  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
RELATION - это слабо-управляемая конструкция.

Как вариант, сделай параметризированное View или CursorAdapter. Т.е. выборку всех дочерних записей для одной записи главной таблицы. Тогда можно использовать Recno() и Reccount() из этой выборки для отображения n/k. Хотя, кончено, даже такое решение не универсальное...
20 май 07, 11:15    [4160191]     Ответить | Цитировать Сообщить модератору
 Re: Вот еще вопрос ... Подкиньте идейку !  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Не посмотрел. CursorAdapter появился только в VFP8. Значит, остается только View или прямая выборка по Select-SQL.

Есть правда еще один вариант. Нечто среднее. Оставить RELATION, но и сделать дополнительную выборку. Только ключевого поля. Т.е. все те же Recno() и Reccount(), но у вспомогательной выборки. Связь по значению ключевого поля.
20 май 07, 11:18    [4160192]     Ответить | Цитировать Сообщить модератору
 Re: Вот еще вопрос ... Подкиньте идейку !  [new]
VFP7
Guest
Да я и сам понимаю, что универсальности тут быть не может. Тем более, представлениями не оперировал - как-то не сложилось у меня с контейнерами БД, предпочитаю free-tables. Видать, меня dbc-шками в детстве сильно напугали :))
А вот насчет частных выборок для уникальных значений ключевых полей - спасибо за подсказанное направление. Буду мыслить туда, кажется там есть определенные перспективы. Конечно, при большом числе записей в таблицах такой метод не подойдет, но у меня как раз случай с небольшим числом записей (до 300).
Еще раз благодарю. Думаю, можно тему считать закрытой.
20 май 07, 22:56    [4160995]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить