![]() |
|
|
![]()
|
|
| Arien |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 13.3.2006 Репутация: нет Всего: нет |
Ситуация следующая: данные из двух связанных таблиц собраны в view, которое на форме представлено grid'ом. Таблица "Отделы" связана с таблицей "Кадры" один-ко-многим. При добавлении или редактировании записи в view название отдела из таблицы "Отделы" подставляется только после закрытия формы. При этом данные в таблице "Кадры" обновляются корректно. Подскажите, как заставить данные в view обновляться раньше.
|
|||
|
||||
| MFoxer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 18.1.2006 Репутация: -1 Всего: нет |
Local View имеет режим буферизации №3.
= TableUpdate ("View"...) пробовать не пробовали ? ( далее смотреть help ) Для начала приведите код вашего View, Вы же делали его либо "рукмми" , либо через коструктор представлений, а там есть возможностьего просмотра. И как вы закрываете формы и как вы оперируете данными - View, все равно. Есть каталог ( таблицы матер- слейв) из низ создан View, настроено ключевое поле и обновляемые поля. Вот и все. Приведите код представления, чтобы не аоду разводить , а сказать Вам,где вы ошиблись. |
|||
|
||||
| Arien |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 13.3.2006 Репутация: нет Всего: нет |
SELECT Main.id, Main.surn, Main.name, Main.patronymic, Main.birth_date,;
Main.educ, Main.speciality, Main.educ_institute, Main.depart_decree,; Departments_b.name, Main.depart_actual, Departments.name,; Main.date_end_contr, Main.num_decree, Main.date_decree, Main.seniority,; Main.home_addr, Main.addr_lutsk, Main.tel_home, Main.tel_mob,; Main.passport, Main.comment; FROM ; cadres!departments ; INNER JOIN cadres!main ; ON Departments.id = Main.depart_actual ; INNER JOIN cadres!departments Departments_b ; ON Main.depart_decree = Departments_b.id DBSetProp(ThisView,"View","SendUpdates",.T.) DBSetProp(ThisView,"View","BatchUpdateCount",1) DBSetProp(ThisView,"View","CompareMemo",.T.) DBSetProp(ThisView,"View","FetchAsNeeded",.F.) DBSetProp(ThisView,"View","FetchMemo",.T.) DBSetProp(ThisView,"View","FetchSize",100) DBSetProp(ThisView,"View","MaxRecords",-1) DBSetProp(ThisView,"View","Prepared",.F.) DBSetProp(ThisView,"View","UpdateType",1) DBSetProp(ThisView,"View","UseMemoSize",255) DBSetProp(ThisView,"View","Tables","cadres!main") DBSetProp(ThisView,"View","WhereType",3) DBSetProp(ThisView+".id","Field","Caption","¹") DBSetProp(ThisView+".id","Field","DataType","I") DBSetProp(ThisView+".id","Field","UpdateName","cadres!main.id") DBSetProp(ThisView+".id","Field","KeyField",.T.) DBSetProp(ThisView+".id","Field","Updatable",.T.) DBSetProp(ThisView+".surn","Field","Caption","Ïð³çâèùå") DBSetProp(ThisView+".surn","Field","DataType","C(30)") DBSetProp(ThisView+".surn","Field","UpdateName","cadres!main.surn") DBSetProp(ThisView+".surn","Field","KeyField",.F.) DBSetProp(ThisView+".surn","Field","Updatable",.T.) DBSetProp(ThisView+".name_a","Field","Caption","²ì'ÿ") DBSetProp(ThisView+".name_a","Field","DataType","C(20)") DBSetProp(ThisView+".name_a","Field","UpdateName","cadres!main.name") DBSetProp(ThisView+".name_a","Field","KeyField",.F.) DBSetProp(ThisView+".name_a","Field","Updatable",.T.) DBSetProp(ThisView+".patronymic","Field","Caption","Ïî-áàòüêîâ³") DBSetProp(ThisView+".patronymic","Field","DataType","C(20)") DBSetProp(ThisView+".patronymic","Field","UpdateName","cadres!main.patronymic") DBSetProp(ThisView+".patronymic","Field","KeyField",.F.) DBSetProp(ThisView+".patronymic","Field","Updatable",.T.) DBSetProp(ThisView+".birth_date","Field","Caption","Äàòà íàðîäæ.") DBSetProp(ThisView+".birth_date","Field","DataType","D") DBSetProp(ThisView+".birth_date","Field","UpdateName","cadres!main.birth_date") DBSetProp(ThisView+".birth_date","Field","KeyField",.F.) DBSetProp(ThisView+".birth_date","Field","Updatable",.T.) DBSetProp(ThisView+".educ","Field","Caption","Îñâ³òà") DBSetProp(ThisView+".educ","Field","DataType","N(4)") DBSetProp(ThisView+".educ","Field","UpdateName","cadres!main.educ") DBSetProp(ThisView+".educ","Field","KeyField",.F.) DBSetProp(ThisView+".educ","Field","Updatable",.T.) DBSetProp(ThisView+".speciality","Field","Caption","Ñïåö³àëüí³ñòü") DBSetProp(ThisView+".speciality","Field","DataType","C(15)") DBSetProp(ThisView+".speciality","Field","UpdateName","cadres!main.speciality") DBSetProp(ThisView+".speciality","Field","KeyField",.F.) DBSetProp(ThisView+".speciality","Field","Updatable",.T.) DBSetProp(ThisView+".educ_institute","Field","Caption","Íàâ÷. çàêëàä") DBSetProp(ThisView+".educ_institute","Field","DataType","C(40)") DBSetProp(ThisView+".educ_institute","Field","UpdateName","cadres!main.educ_institute") DBSetProp(ThisView+".educ_institute","Field","KeyField",.F.) DBSetProp(ThisView+".educ_institute","Field","Updatable",.T.) DBSetProp(ThisView+".depart_decree","Field","Caption","¹ â³ää³ëó çã³äíî íàêàçó") DBSetProp(ThisView+".depart_decree","Field","DataType","N(4)") DBSetProp(ThisView+".depart_decree","Field","UpdateName","cadres!main.depart_decree") DBSetProp(ThisView+".depart_decree","Field","KeyField",.F.) DBSetProp(ThisView+".depart_decree","Field","Updatable",.T.) DBSetProp(ThisView+".name_b","Field","Caption","³ää³ë çã³äíî íàêàçó") DBSetProp(ThisView+".name_b","Field","DataType","C(30)") DBSetProp(ThisView+".name_b","Field","UpdateName","cadres!departments.name") DBSetProp(ThisView+".name_b","Field","KeyField",.F.) DBSetProp(ThisView+".name_b","Field","Updatable",.F.) DBSetProp(ThisView+".depart_actual","Field","Caption","¹ â³ää³ëó ôàêòè÷íî") DBSetProp(ThisView+".depart_actual","Field","DataType","N(4)") DBSetProp(ThisView+".depart_actual","Field","UpdateName","cadres!main.depart_actual") DBSetProp(ThisView+".depart_actual","Field","KeyField",.F.) DBSetProp(ThisView+".depart_actual","Field","Updatable",.T.) DBSetProp(ThisView+".name_c","Field","Caption","³ää³ë ôàêòè÷íî") DBSetProp(ThisView+".name_c","Field","DataType","C(30)") DBSetProp(ThisView+".name_c","Field","UpdateName","cadres!departments.name") DBSetProp(ThisView+".name_c","Field","KeyField",.F.) DBSetProp(ThisView+".name_c","Field","Updatable",.F.) DBSetProp(ThisView+".date_end_contr","Field","Caption","Äàòà çàê³í÷. êîíòð.") DBSetProp(ThisView+".date_end_contr","Field","DataType","D") DBSetProp(ThisView+".date_end_contr","Field","UpdateName","cadres!main.date_end_contr") DBSetProp(ThisView+".date_end_contr","Field","KeyField",.F.) DBSetProp(ThisView+".date_end_contr","Field","Updatable",.T.) DBSetProp(ThisView+".num_decree","Field","Caption","¹ íàêàçó") DBSetProp(ThisView+".num_decree","Field","DataType","C(10)") DBSetProp(ThisView+".num_decree","Field","UpdateName","cadres!main.num_decree") DBSetProp(ThisView+".num_decree","Field","KeyField",.F.) DBSetProp(ThisView+".num_decree","Field","Updatable",.T.) DBSetProp(ThisView+".date_decree","Field","Caption","Äàòà íàêàçó") DBSetProp(ThisView+".date_decree","Field","DataType","D") DBSetProp(ThisView+".date_decree","Field","UpdateName","cadres!main.date_decree") DBSetProp(ThisView+".date_decree","Field","KeyField",.F.) DBSetProp(ThisView+".date_decree","Field","Updatable",.T.) DBSetProp(ThisView+".seniority","Field","Caption","Ñòàæ") DBSetProp(ThisView+".seniority","Field","DataType","C(15)") DBSetProp(ThisView+".seniority","Field","UpdateName","cadres!main.seniority") DBSetProp(ThisView+".seniority","Field","KeyField",.F.) DBSetProp(ThisView+".seniority","Field","Updatable",.T.) DBSetProp(ThisView+".home_addr","Field","Caption","Äîì. àäðåñà") DBSetProp(ThisView+".home_addr","Field","DataType","C(30)") DBSetProp(ThisView+".home_addr","Field","UpdateName","cadres!main.home_addr") DBSetProp(ThisView+".home_addr","Field","KeyField",.F.) DBSetProp(ThisView+".home_addr","Field","Updatable",.T.) DBSetProp(ThisView+".addr_lutsk","Field","Caption","Àäðåñà â Ëóöüêó") DBSetProp(ThisView+".addr_lutsk","Field","DataType","C(30)") DBSetProp(ThisView+".addr_lutsk","Field","UpdateName","cadres!main.addr_lutsk") DBSetProp(ThisView+".addr_lutsk","Field","KeyField",.F.) DBSetProp(ThisView+".addr_lutsk","Field","Updatable",.T.) DBSetProp(ThisView+".tel_home","Field","Caption","Òåë. äîì.") DBSetProp(ThisView+".tel_home","Field","DataType","C(10)") DBSetProp(ThisView+".tel_home","Field","UpdateName","cadres!main.tel_home") DBSetProp(ThisView+".tel_home","Field","KeyField",.F.) DBSetProp(ThisView+".tel_home","Field","Updatable",.T.) DBSetProp(ThisView+".tel_mob","Field","Caption","Òåë. ìîá.") DBSetProp(ThisView+".tel_mob","Field","DataType","C(15)") DBSetProp(ThisView+".tel_mob","Field","UpdateName","cadres!main.tel_mob") DBSetProp(ThisView+".tel_mob","Field","KeyField",.F.) DBSetProp(ThisView+".tel_mob","Field","Updatable",.T.) DBSetProp(ThisView+".passport","Field","Caption","Ïàñïîðòí³ äàí³") DBSetProp(ThisView+".passport","Field","DataType","C(30)") DBSetProp(ThisView+".passport","Field","UpdateName","cadres!main.passport") DBSetProp(ThisView+".passport","Field","KeyField",.F.) DBSetProp(ThisView+".passport","Field","Updatable",.T.) DBSetProp(ThisView+".comment","Field","Caption","Ïðèì³òêà") DBSetProp(ThisView+".comment","Field","DataType","C(30)") DBSetProp(ThisView+".comment","Field","UpdateName","cadres!main.comment") DBSetProp(ThisView+".comment","Field","KeyField",.F.) DBSetProp(ThisView+".comment","Field","Updatable",.T.) |
|||
|
||||
| MFoxer |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 18.1.2006 Репутация: -1 Всего: нет |
На первый взгляд, ошибок я не вижу.
Значит делаем так:
После этой команды курсор на логически 1 записи в твоем VIEW. Именно логической, так как в этом режиме ты еще можешь создавать для VIEW индекс, в 5 режиме не можешь. Допустим ты перешел на логическую запись 5 ( не RECNO() ! ), выбрал руками, поиском или иным другим механизмом тобой реализованным. Тебе нужно данные обновить. Это делается так, к примеру:
Теперь обязательно (!) нужно сбросить буфер в таблицы ( потому как 3 режим- это строчная буферизация): Самое простое решение, такое:
Теперь освежим VIEW новыми данными:
|
||||||||
|
|||||||||
| Arien |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 13.3.2006 Репутация: нет Всего: нет |
У объекта lo_Obj нет таких свойств, как Caption и Comment. Так что до error'а AERROR( laError ) вообще не доходит
|
|||
|
||||
| MFoxer |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 18.1.2006 Репутация: -1 Всего: нет |
Ну так для примера возьми что есть:
И еще , не шути вот с этим:
Как я понимаю, для удобство читабельности в Browse. Забудь о нем. Есть GRID. Должно быть:
REQUERY("VIEW") - верно, другая. А отслеживать у тебя не получиться. В буфере они лежать с "-", а в таблице с "+". Для примера, добавь в буфер запись и верни ее Recno(). = -1 и так далее с пометрокй операции что ты делал. А в реальной таблице с "+". REQUERY можно не делать, если у тебя Грид или любой другой контрол приявязан с View. Можно ему просто сделать refresh(). |
||||||
|
|||||||
| Arien |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 13.3.2006 Репутация: нет Всего: нет |
Получается ошибка "Field ID is read-only". Оно пытается обновить поле id в таблице cadres, а это поле автоинкремент. Что сделать, чтобы оно не лезло к этому полю? (Само собой, я изменяю значение другого поля)
Кстати, насчёт грида. Если его обновить (refresh) - никаких изменений. Данные из связанной таблицы подставляются только после requery, но при этом активной становится другая запись. Это ещё полбеды, нужно, чтобы отдел можно было выбрать из комбо (названия отделов в таблице departments). То есть отдел можно выбрать или по номеру, или по названию. Это сообщение отредактировал(а) Arien - 20.3.2006, 17:08 |
|||
|
||||
| Cashey |
|
||||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: 13 Всего: 60 |
Вот это, например:
-------------------- библия учит любить ближнего, а камасутра обучает как именно |
||||
|
|||||
| MFoxer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 18.1.2006 Репутация: -1 Всего: нет |
Arien, код в студию. Приведи полный скрипт по формированию таблиц , вьюху и как ты и что там сбрасываешь ? Я примерно сделал так же как у тебя, все проходид на ура и в 3 и 5 режиме. Правда такой галиматьей как автоинкримент я не балаюсь. Лучьше самомоу написать NewID(), что-то типа этого.
|
|||
|
||||
| Arien |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 13.3.2006 Репутация: нет Всего: нет |
Привожу код, который FoxPro нагенерил самостоятельно в Stored Procedures:
Таблицы и связи создавались через Project Manager, могу поискать этот код в Command, но смысла особо не вижу. В таблице main три индекса: один ID - Primary, и два Regular: depart_act и depart_dec, которые относятся к id отделов (фактического и формального). В таблице departments один Primary индекс - ID. Он связан один-ко-многим з регулярными индексами таблицы Main. Если работать с browse этого view, при заполнении номера отдела название из таблицы departments тоже не подставляется, пока не было явного requery. Может быть, дело в Referential Integrity связей? Там везде стоит Ignore, если меняю, база не открывается (".dbc internal consistency error" или что-то вроде этого). |
|||
|
||||
| MFoxer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 18.1.2006 Репутация: -1 Всего: нет |
Блин
Зачем ты вообще пользуешься для поддержания ссылочной целостности фоксовским визардом. Делай все руками, меньше проблем будет. Удачи. |
|||
|
||||
![]()
|
| Правила форума "Foxpro/Clipper/Dbase" | |
|
|
Запрещается! 1. Публиковать ссылки для чисто рекламных целей. 2. Оффтопить, флеймить, говорить не культурно. Пожалуйста, адекватно задавайте свой вопрос. Тема должна создаваться с названием характеризующем Вашу проблему. Задавайте вопросы правильно - как спросите, так вам и ответят. Разрешено! Давать ссылки на статьи, обзоры, если это не нарушает первый пункт правил. Задавая вопрос, давайте нужную информацию касающуюся Вашей проблемы. Этим вы ускорите полезные ответы. P.S. Размещение рекламы будет строго наказываться! Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MoLeX |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Foxpro/Clipper/Dbase | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |