powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос по local view
25 сообщений из 27, страница 1 из 2
Вопрос по local view
    #39151790
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

возникла проблема с local view (или с чем еще, не знаю)

На форма заполняю грид, источник грида - local view. заполнил грид, сбросил буфер в view, потом процедура save - перенес в таблицу.

Все вроде работает. Но иногда вдруг view перестает видеть некоторые строки. Т.е. сохранение в таблицу произошло, в таблице все есть, а view в упор не видит. Это случается редко, но где-то 20-30 записей из примерно 1200 потеряны, вернее не потеряны, а view их не видит и, соответственно грид не отображает, но в таблице они есть и все ключи в порядке. Форма у меня что-то вроде счета, где в гриде заполняются и отображаются детали.

Всего пользователей пока что максимум 3 могут одновременно зайти в форму, может мне выкосить вообще этот View и прямо в таблицу данные сохранять? с другой стороны хотел с view разобраться. Может кто подскажет, куда думать?
...
Рейтинг: 0 / 0
Вопрос по local view
    #39151797
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что значит "view перестает видеть некоторые строки" ?

Ты уверен что правильно понимаешь принципы работы view? view это по сути кэш связанный с исходными данными, т.е. с БД.
Если что-то меняешь во view и фиксируешь изменения - это попадает в БД, но другие пользователи сидят со своими view и понятия не имеют что ты изменил БД, до тех пор пока не обновят свое view.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39151821
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tчто значит "view перестает видеть некоторые строки" ?

Ты уверен что правильно понимаешь принципы работы view? view это по сути кэш связанный с исходными данными, т.е. с БД.
Если что-то меняешь во view и фиксируешь изменения - это попадает в БД, но другие пользователи сидят со своими view и понятия не имеют что ты изменил БД, до тех пор пока не обновят свое view.

Что правильно понимаю - не уверен.

Но я понимаю, что если изменяю во view - это попадает в БД, и то, что связан с БД - тоже понимаю. То, что у пользователей происходит - тоже понимаю. Поэтому и спрашиваю - как такое может быть. Создали запись на форме, сбросили буфер в view, затем перенесли в БД. В БД запись эту вижу, а view - не отображает. По какому принципу и в какой момент это происходит установить - не могу. Причем только некоторые редкие записи, далеко не все и не каждый раз.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39151827
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Например, это моя таблица и view. В картинке видны 2 записи с iordh_id = 482 , а во view их нет. Причем в таблицу они попали совершенно легально через тот самый view.
Физически для пользователя это выглядит, как исчезновение строк после нажатия save. Т.е. в БД попали, а потом перестали отображаться.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39151828
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это view
...
Рейтинг: 0 / 0
Вопрос по local view
    #39151851
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я имел ввиду - это фрагменты таблицы и view.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39151856
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь я просто еще раз завел в документе эти строки, при этом прежние записи удаляются, а новые, абсолютно идентичные и введенные абсолютно точно так же через форму, на этот раз в view "видны", соответственно в гриде на форме отображаются.

Как устранить глюк, в какую сторону думать?
...
Рейтинг: 0 / 0
Вопрос по local view
    #39151987
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда чего-то невидно пропробуй обновить view
Код: sql
1.
2.
sele l_ord_dt
refresh()



Судя по картинкам у тебя несколько раз открыто view (l_ord_dt и l_ord_dt_a) может в этом причина? Не то обновляешь. Если вообще обновляешь.

Еще раз как работает: view это копия данных из БД. Когда ты вносишь изменения и сохраняешь - изменения передаются в БД, но при этом новые данные из БД автоматом не подгружаются во view. Т.е. у тебя остается старая копия БД с изменениями которые сделаны только в этом view, изменения сохраненные через другие view не будет видно.
По хорошему после сохранения изменений надо делать refresh() или просто закрыть и заново открыть.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152281
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TКогда чего-то невидно пропробуй обновить view
Код: sql
1.
2.
sele l_ord_dt
refresh()



Судя по картинкам у тебя несколько раз открыто view (l_ord_dt и l_ord_dt_a) может в этом причина? Не то обновляешь. Если вообще обновляешь.

Еще раз как работает: view это копия данных из БД. Когда ты вносишь изменения и сохраняешь - изменения передаются в БД, но при этом новые данные из БД автоматом не подгружаются во view. Т.е. у тебя остается старая копия БД с изменениями которые сделаны только в этом view, изменения сохраненные через другие view не будет видно.
По хорошему после сохранения изменений надо делать refresh() или просто закрыть и заново открыть.

l_ord_dt_a - это можно не обращать внимание, это я в отчаянии накосячил-накликал, пытаясь разобраться. На самом деле это никак не причем.

я понимаю про то, что view - это копия БД. Вопрос в чем, я при сохранении передаю данные в БД, они передаются. Но потом несколько строк view "не видит в упор"

после сохранения БД вроде все refresh-ы необходимые делаются.
для view
Код: sql
1.
2.
3.
4.
5.
6.
7.
=REQUERY('l_ord_dt')

IF SEEK(hord_h.iordh_id,'horddt','iordh_id')
	SELECT l_ord_dt
	SET FILTER TO l_ord_dt.iordh_id = hord_h.iordh_id
	GO TOP IN l_ord_dt
ENDIF


По-моему это должно обновить view и отобрать записи для текущего документа. Потом refresh формы и грида. Более того, это работает для почти всех записей.

Таблицы на картинках я открывал специально в VFP вне приложения, при этом таблица view заполняется через RunSql т.е. все условия По хорошему после сохранения изменений надо делать refresh() или просто закрыть и заново открыть. выполнены. Я специально так открывал, что бы нагляднее было. И там видно, что записи с id = 482 view по какой-то причине проигнорировал, а следующая запись из другого документа с id = 483 уже видна.

Если повторить абсолютно идентичные манипуляции ввода в документ с "исчезнувшими" строками или ввести любые другие, то находящиеся в БД и невидимые view записи (c id 482 в данном случае) будут удалены, а новые будут отображаться в view. Это на 3-й картинке видно - я повторно завел строки через форму и они остались видимыми для view (это на картинке) и соответственно, на форме документа.

Я хочу обратить внимание на то, что такая ситуация - сравнительно редкая, в большинстве случаев все работает и отображается как надо. Но раз в две недели у пользователя исчезают строки в документе, а я их потом нахожу в БД, но никак не могу заставить view их отобразить. Решение для пользователя - простой перенабор этих строк. Но как полечить глюк?
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152286
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И, я полагаю, ошибок в самом наборе нет, поскольку все перенесено в БД и все поля заполнены корректно. Т.е. это не связано с какими-то ошибками пользователя при наборе данных.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152307
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot DmitryKn
...
Таблицы на картинках я открывал специально в VFP вне приложения, при этом таблица view заполняется через RunSql[/quot]

Прошу прощения, я имел ввиду через Run Query, но это не важно, открытие view с помощью кнопки Browse все равно дает тот же эффект заполнения view с последними изменениями БД.

П.С. Очень неудобно, когда нельзя редактировать свои сообщения.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152312
DmitryKnВопрос в чем, я при сохранении передаю данные в БД, они передаются. Но потом несколько строк view "не видит в упор"

Один я SET FILTER TO вижу?

DmitryKn
Код: sql
1.
2.
3.
4.
5.
6.
7.
=REQUERY('l_ord_dt')

IF SEEK(hord_h.iordh_id,'horddt','iordh_id')
	SELECT l_ord_dt
>>>	SET FILTER TO l_ord_dt.iordh_id = hord_h.iordh_id
	GO TOP IN l_ord_dt
ENDIF



Вот и ответ на Ваш вопрос... То, что не попадает под условие фильтра - то и не отображается. Почему не попадает - я не экстрасенс, копайте сами.

Совет: Может в данном случае лучше не фильтром пользоваться, а устанавливать связи через SET RELATION TO ?
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152328
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKnпосле сохранения БД вроде все refresh-ы необходимые делаются.
для view
Код: sql
1.
2.
3.
4.
5.
6.
7.
=REQUERY('l_ord_dt')

IF SEEK(hord_h.iordh_id,'horddt','iordh_id')
	SELECT l_ord_dt
	SET FILTER TO l_ord_dt.iordh_id = hord_h.iordh_id
	GO TOP IN l_ord_dt
ENDIF


По-моему это должно обновить view и отобрать записи для текущего документа. Потом refresh формы и грида. Более того, это работает для почти всех записей.
Все правильно. Я выше напутал с refresh(), надо REQUERY()
только ты не проверяешь что вернуло REQUERY().

set fiter тут вообще не в тему. Правильно если view содержит только нужные записи. Почитай про view с параметрами, давно не пользовался, точно не помню как прописывается.
DmitryKnЯ хочу обратить внимание на то, что такая ситуация - сравнительно редкая, в большинстве случаев все работает и отображается как надо. Но раз в две недели у пользователя исчезают строки в документе, а я их потом нахожу в БД, но никак не могу заставить view их отобразить. Решение для пользователя - простой перенабор этих строк. Но как полечить глюк?
В смысле строки в БД есть, но стабильно не показываются? Перезапускаешь прогу и все-равно нет этих строк? Если так - бери копию базы, и ковыряйся - ищи что не так в этой строке и каким фильтром она убирается. Как вариант: завести второй раз нормально, затем сравнить чем отличаются.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152370
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав С...кийDmitryKnВопрос в чем, я при сохранении передаю данные в БД, они передаются. Но потом несколько строк view "не видит в упор"

Один я SET FILTER TO вижу?

DmitryKn
Код: sql
1.
2.
3.
4.
5.
6.
7.
=REQUERY('l_ord_dt')

IF SEEK(hord_h.iordh_id,'horddt','iordh_id')
	SELECT l_ord_dt
>>>	SET FILTER TO l_ord_dt.iordh_id = hord_h.iordh_id
	GO TOP IN l_ord_dt
ENDIF



Вот и ответ на Ваш вопрос... То, что не попадает под условие фильтра - то и не отображается. Почему не попадает - я не экстрасенс, копайте сами.

Совет: Может в данном случае лучше не фильтром пользоваться, а устанавливать связи через SET RELATION TO ?

Документ имеет заголовок и детали, т.е. те самые записи. Таблица БД содержит в себе все записи(детали) всех документов. Set filter to - отбирает записи, относящиеся к одному заголовку. Все условия соблюдены и все подпадает.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152385
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TDmitryKnпосле сохранения БД вроде все refresh-ы необходимые делаются.
для view
Код: sql
1.
2.
3.
4.
5.
6.
7.
=REQUERY('l_ord_dt')

IF SEEK(hord_h.iordh_id,'horddt','iordh_id')
	SELECT l_ord_dt
	SET FILTER TO l_ord_dt.iordh_id = hord_h.iordh_id
	GO TOP IN l_ord_dt
ENDIF


По-моему это должно обновить view и отобрать записи для текущего документа. Потом refresh формы и грида. Более того, это работает для почти всех записей.
Все правильно. Я выше напутал с refresh(), надо REQUERY()
только ты не проверяешь что вернуло REQUERY().

set fiter тут вообще не в тему. Правильно если view содержит только нужные записи. Почитай про view с параметрами, давно не пользовался, точно не помню как прописывается.
DmitryKnЯ хочу обратить внимание на то, что такая ситуация - сравнительно редкая, в большинстве случаев все работает и отображается как надо. Но раз в две недели у пользователя исчезают строки в документе, а я их потом нахожу в БД, но никак не могу заставить view их отобразить. Решение для пользователя - простой перенабор этих строк. Но как полечить глюк?
В смысле строки в БД есть, но стабильно не показываются? Перезапускаешь прогу и все-равно нет этих строк? Если так - бери копию базы, и ковыряйся - ищи что не так в этой строке и каким фильтром она убирается. Как вариант: завести второй раз нормально, затем сравнить чем отличаются.

Про view с параметрами - попробую поискать.

Строки заводил - ничем абсолютно не отличаются. Может я не совсем верно view построил, может что-то с обновлением. Но ведь в 98% работает, хз. Но строки точно ничем не отличаются, а тот фильтр - единственный.

Что интересно - если в таблицу дополнительно завести строку вручную из VFP, то если она идентична "потерянной", то тоже не будет видна. Если через форму - все будет в порядке ((
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152410
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты на вопрос не ответил
Dima TВ смысле строки в БД есть, но стабильно не показываются ? Перезапускаешь прогу и все-равно нет этих строк? Если так - бери копию базы, и ковыряйся - ищи что не так в этой строке и каким фильтром она убирается. Как вариант: завести второй раз нормально, затем сравнить чем отличаются.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152458
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TТы на вопрос не ответил
Dima TВ смысле строки в БД есть, но стабильно не показываются ? Перезапускаешь прогу и все-равно нет этих строк? Если так - бери копию базы, и ковыряйся - ищи что не так в этой строке и каким фильтром она убирается. Как вариант: завести второй раз нормально, затем сравнить чем отличаются.

Dima T, по твоему совету внимательно проковырял строки - все-таки это ошибка ввода оказалась. Заполняется грид, в нем много встроенных комбо, заполняются последовательно, данные из связанных таблиц. В какой-то момент пользователь возвращается назад и изменяет значение в одном из полей. В результате целостность нарушается и строка выпадает. View тут не причем.

Спасибо, что натолкнули разобрать строку, так-то на первый взгляд все нормально было ) Теперь надо думать, как блокировать такой случай.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152572
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и отлично.

PS Не забудь с параметрами вью разобраться. С set filter это тормозной говно-код.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152603
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TНу и отлично.

PS Не забудь с параметрами вью разобраться. С set filter это тормозной говно-код.

Так, на всякий случай спрошу - а с параметрами, это случайно не к Cursor Adapter ? Просто какие параметры у view ? По крайней мере в умных книжках ничего такого нет. Там правда и про CA немного.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152612
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKnDima TНу и отлично.

PS Не забудь с параметрами вью разобраться. С set filter это тормозной говно-код.

Так, на всякий случай спрошу - а с параметрами, это случайно не к Cursor Adapter ? Просто какие параметры у view ? По крайней мере в умных книжках ничего такого нет. Там правда и про CA немного.
Cursor Adapter это тот же вью, просто он немного удобнее в использовании. Параметры есть в обоих.
я не стал писать чтобы не напутать. Принцип примерно такой:
заводишь переменную parent_id, перед открытием присваиваешь ей значение
Код: sql
1.
2.
3.
parent_id = parent_table.id
use my_view
...


а во вью запрос примерно такой
Код: sql
1.
select ... where par_id = ?parent_id


и вместо ?parent_id подставляется значение parent_id.

Читай документацию, точно не помню.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152619
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T...

[/src]
а во вью запрос примерно такой
Код: sql
1.
select ... where par_id = ?parent_id


и вместо ?parent_id подставляется значение parent_id.

Читай документацию, точно не помню.

А да, такое мне знакомо, только я по своему неразумению посчитал, что это тот же фильтр. Я изначально так хотел сделать, только у меня при запуске формы этот ?parent_id постоянно запрашивался, хоть я и в Load формы его определил. Вот и решил особо не мудрить, а поставить Set filter.

Поправлю, спасибо еще раз.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152628
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если это форма, то правильнее добавить форме свойство parent_id, а в запросе
Код: sql
1.
select ... where par_id = ?thisform.parent_id


я примерно так в курсорадаптере делаю.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152636
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tесли это форма, то правильнее добавить форме свойство parent_id, а в запросе
Код: sql
1.
select ... where par_id = ?thisform.parent_id


я примерно так в курсорадаптере делаю.

Всё, вроде всё получилось. Только со свойством формы как-то не пошло, а получилось так:

DE Autoopentables = .f.

А в форме Load
Код: sql
1.
2.
3.
4.
PRIVATE piord_id
pior_id = 0

THIS.DataEnvironment.OpenTables()



далее уже указываю текущее значение ключа в init и requery и на первый взгляд все хорошо.

Иначе никак - при запуске формы хочет значение и все тут.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152638
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вставь код в DE.BeforeOpenTables()
и убери DE Autoopentables = .f.
...
Рейтинг: 0 / 0
Вопрос по local view
    #39152641
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курсорадаптер тем и удобнее, что он часть формы, а не базы. Поэтому в нем при использовании ?thisform.parent_id полностью совпадают области видимости курсорадаптера и его параметра.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос по local view
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]