|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Добрый день, возникла проблема с local view (или с чем еще, не знаю) На форма заполняю грид, источник грида - local view. заполнил грид, сбросил буфер в view, потом процедура save - перенес в таблицу. Все вроде работает. Но иногда вдруг view перестает видеть некоторые строки. Т.е. сохранение в таблицу произошло, в таблице все есть, а view в упор не видит. Это случается редко, но где-то 20-30 записей из примерно 1200 потеряны, вернее не потеряны, а view их не видит и, соответственно грид не отображает, но в таблице они есть и все ключи в порядке. Форма у меня что-то вроде счета, где в гриде заполняются и отображаются детали. Всего пользователей пока что максимум 3 могут одновременно зайти в форму, может мне выкосить вообще этот View и прямо в таблицу данные сохранять? с другой стороны хотел с view разобраться. Может кто подскажет, куда думать? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 19:39 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
что значит "view перестает видеть некоторые строки" ? Ты уверен что правильно понимаешь принципы работы view? view это по сути кэш связанный с исходными данными, т.е. с БД. Если что-то меняешь во view и фиксируешь изменения - это попадает в БД, но другие пользователи сидят со своими view и понятия не имеют что ты изменил БД, до тех пор пока не обновят свое view. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 19:51 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Dima Tчто значит "view перестает видеть некоторые строки" ? Ты уверен что правильно понимаешь принципы работы view? view это по сути кэш связанный с исходными данными, т.е. с БД. Если что-то меняешь во view и фиксируешь изменения - это попадает в БД, но другие пользователи сидят со своими view и понятия не имеют что ты изменил БД, до тех пор пока не обновят свое view. Что правильно понимаю - не уверен. Но я понимаю, что если изменяю во view - это попадает в БД, и то, что связан с БД - тоже понимаю. То, что у пользователей происходит - тоже понимаю. Поэтому и спрашиваю - как такое может быть. Создали запись на форме, сбросили буфер в view, затем перенесли в БД. В БД запись эту вижу, а view - не отображает. По какому принципу и в какой момент это происходит установить - не могу. Причем только некоторые редкие записи, далеко не все и не каждый раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 20:33 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Например, это моя таблица и view. В картинке видны 2 записи с iordh_id = 482 , а во view их нет. Причем в таблицу они попали совершенно легально через тот самый view. Физически для пользователя это выглядит, как исчезновение строк после нажатия save. Т.е. в БД попали, а потом перестали отображаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 20:42 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Я имел ввиду - это фрагменты таблицы и view. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 21:59 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Теперь я просто еще раз завел в документе эти строки, при этом прежние записи удаляются, а новые, абсолютно идентичные и введенные абсолютно точно так же через форму, на этот раз в view "видны", соответственно в гриде на форме отображаются. Как устранить глюк, в какую сторону думать? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 22:19 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Когда чего-то невидно пропробуй обновить view Код: sql 1. 2.
Судя по картинкам у тебя несколько раз открыто view (l_ord_dt и l_ord_dt_a) может в этом причина? Не то обновляешь. Если вообще обновляешь. Еще раз как работает: view это копия данных из БД. Когда ты вносишь изменения и сохраняешь - изменения передаются в БД, но при этом новые данные из БД автоматом не подгружаются во view. Т.е. у тебя остается старая копия БД с изменениями которые сделаны только в этом view, изменения сохраненные через другие view не будет видно. По хорошему после сохранения изменений надо делать refresh() или просто закрыть и заново открыть. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 09:56 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Dima TКогда чего-то невидно пропробуй обновить view Код: sql 1. 2.
Судя по картинкам у тебя несколько раз открыто 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.
По-моему это должно обновить view и отобрать записи для текущего документа. Потом refresh формы и грида. Более того, это работает для почти всех записей. Таблицы на картинках я открывал специально в VFP вне приложения, при этом таблица view заполняется через RunSql т.е. все условия По хорошему после сохранения изменений надо делать refresh() или просто закрыть и заново открыть. выполнены. Я специально так открывал, что бы нагляднее было. И там видно, что записи с id = 482 view по какой-то причине проигнорировал, а следующая запись из другого документа с id = 483 уже видна. Если повторить абсолютно идентичные манипуляции ввода в документ с "исчезнувшими" строками или ввести любые другие, то находящиеся в БД и невидимые view записи (c id 482 в данном случае) будут удалены, а новые будут отображаться в view. Это на 3-й картинке видно - я повторно завел строки через форму и они остались видимыми для view (это на картинке) и соответственно, на форме документа. Я хочу обратить внимание на то, что такая ситуация - сравнительно редкая, в большинстве случаев все работает и отображается как надо. Но раз в две недели у пользователя исчезают строки в документе, а я их потом нахожу в БД, но никак не могу заставить view их отобразить. Решение для пользователя - простой перенабор этих строк. Но как полечить глюк? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 14:17 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
И, я полагаю, ошибок в самом наборе нет, поскольку все перенесено в БД и все поля заполнены корректно. Т.е. это не связано с какими-то ошибками пользователя при наборе данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 14:23 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
[quot DmitryKn ... Таблицы на картинках я открывал специально в VFP вне приложения, при этом таблица view заполняется через RunSql[/quot] Прошу прощения, я имел ввиду через Run Query, но это не важно, открытие view с помощью кнопки Browse все равно дает тот же эффект заполнения view с последними изменениями БД. П.С. Очень неудобно, когда нельзя редактировать свои сообщения. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 14:41 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
DmitryKnВопрос в чем, я при сохранении передаю данные в БД, они передаются. Но потом несколько строк view "не видит в упор" Один я SET FILTER TO вижу? DmitryKn Код: sql 1. 2. 3. 4. 5. 6. 7.
Вот и ответ на Ваш вопрос... То, что не попадает под условие фильтра - то и не отображается. Почему не попадает - я не экстрасенс, копайте сами. Совет: Может в данном случае лучше не фильтром пользоваться, а устанавливать связи через SET RELATION TO ? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 14:47 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
DmitryKnпосле сохранения БД вроде все refresh-ы необходимые делаются. для view Код: sql 1. 2. 3. 4. 5. 6. 7.
По-моему это должно обновить view и отобрать записи для текущего документа. Потом refresh формы и грида. Более того, это работает для почти всех записей. Все правильно. Я выше напутал с refresh(), надо REQUERY() только ты не проверяешь что вернуло REQUERY(). set fiter тут вообще не в тему. Правильно если view содержит только нужные записи. Почитай про view с параметрами, давно не пользовался, точно не помню как прописывается. DmitryKnЯ хочу обратить внимание на то, что такая ситуация - сравнительно редкая, в большинстве случаев все работает и отображается как надо. Но раз в две недели у пользователя исчезают строки в документе, а я их потом нахожу в БД, но никак не могу заставить view их отобразить. Решение для пользователя - простой перенабор этих строк. Но как полечить глюк? В смысле строки в БД есть, но стабильно не показываются? Перезапускаешь прогу и все-равно нет этих строк? Если так - бери копию базы, и ковыряйся - ищи что не так в этой строке и каким фильтром она убирается. Как вариант: завести второй раз нормально, затем сравнить чем отличаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 15:03 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Станислав С...кийDmitryKnВопрос в чем, я при сохранении передаю данные в БД, они передаются. Но потом несколько строк view "не видит в упор" Один я SET FILTER TO вижу? DmitryKn Код: sql 1. 2. 3. 4. 5. 6. 7.
Вот и ответ на Ваш вопрос... То, что не попадает под условие фильтра - то и не отображается. Почему не попадает - я не экстрасенс, копайте сами. Совет: Может в данном случае лучше не фильтром пользоваться, а устанавливать связи через SET RELATION TO ? Документ имеет заголовок и детали, т.е. те самые записи. Таблица БД содержит в себе все записи(детали) всех документов. Set filter to - отбирает записи, относящиеся к одному заголовку. Все условия соблюдены и все подпадает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 15:43 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Dima TDmitryKnпосле сохранения БД вроде все refresh-ы необходимые делаются. для view Код: sql 1. 2. 3. 4. 5. 6. 7.
По-моему это должно обновить view и отобрать записи для текущего документа. Потом refresh формы и грида. Более того, это работает для почти всех записей. Все правильно. Я выше напутал с refresh(), надо REQUERY() только ты не проверяешь что вернуло REQUERY(). set fiter тут вообще не в тему. Правильно если view содержит только нужные записи. Почитай про view с параметрами, давно не пользовался, точно не помню как прописывается. DmitryKnЯ хочу обратить внимание на то, что такая ситуация - сравнительно редкая, в большинстве случаев все работает и отображается как надо. Но раз в две недели у пользователя исчезают строки в документе, а я их потом нахожу в БД, но никак не могу заставить view их отобразить. Решение для пользователя - простой перенабор этих строк. Но как полечить глюк? В смысле строки в БД есть, но стабильно не показываются? Перезапускаешь прогу и все-равно нет этих строк? Если так - бери копию базы, и ковыряйся - ищи что не так в этой строке и каким фильтром она убирается. Как вариант: завести второй раз нормально, затем сравнить чем отличаются. Про view с параметрами - попробую поискать. Строки заводил - ничем абсолютно не отличаются. Может я не совсем верно view построил, может что-то с обновлением. Но ведь в 98% работает, хз. Но строки точно ничем не отличаются, а тот фильтр - единственный. Что интересно - если в таблицу дополнительно завести строку вручную из VFP, то если она идентична "потерянной", то тоже не будет видна. Если через форму - все будет в порядке (( ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 16:01 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Ты на вопрос не ответил Dima TВ смысле строки в БД есть, но стабильно не показываются ? Перезапускаешь прогу и все-равно нет этих строк? Если так - бери копию базы, и ковыряйся - ищи что не так в этой строке и каким фильтром она убирается. Как вариант: завести второй раз нормально, затем сравнить чем отличаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 16:27 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Dima TТы на вопрос не ответил Dima TВ смысле строки в БД есть, но стабильно не показываются ? Перезапускаешь прогу и все-равно нет этих строк? Если так - бери копию базы, и ковыряйся - ищи что не так в этой строке и каким фильтром она убирается. Как вариант: завести второй раз нормально, затем сравнить чем отличаются. Dima T, по твоему совету внимательно проковырял строки - все-таки это ошибка ввода оказалась. Заполняется грид, в нем много встроенных комбо, заполняются последовательно, данные из связанных таблиц. В какой-то момент пользователь возвращается назад и изменяет значение в одном из полей. В результате целостность нарушается и строка выпадает. View тут не причем. Спасибо, что натолкнули разобрать строку, так-то на первый взгляд все нормально было ) Теперь надо думать, как блокировать такой случай. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 17:04 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Ну и отлично. PS Не забудь с параметрами вью разобраться. С set filter это тормозной говно-код. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 19:01 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Dima TНу и отлично. PS Не забудь с параметрами вью разобраться. С set filter это тормозной говно-код. Так, на всякий случай спрошу - а с параметрами, это случайно не к Cursor Adapter ? Просто какие параметры у view ? По крайней мере в умных книжках ничего такого нет. Там правда и про CA немного. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 19:51 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
DmitryKnDima TНу и отлично. PS Не забудь с параметрами вью разобраться. С set filter это тормозной говно-код. Так, на всякий случай спрошу - а с параметрами, это случайно не к Cursor Adapter ? Просто какие параметры у view ? По крайней мере в умных книжках ничего такого нет. Там правда и про CA немного. Cursor Adapter это тот же вью, просто он немного удобнее в использовании. Параметры есть в обоих. я не стал писать чтобы не напутать. Принцип примерно такой: заводишь переменную parent_id, перед открытием присваиваешь ей значение Код: sql 1. 2. 3.
а во вью запрос примерно такой Код: sql 1.
и вместо ?parent_id подставляется значение parent_id. Читай документацию, точно не помню. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 20:05 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Dima T... [/src] а во вью запрос примерно такой Код: sql 1.
и вместо ?parent_id подставляется значение parent_id. Читай документацию, точно не помню. А да, такое мне знакомо, только я по своему неразумению посчитал, что это тот же фильтр. Я изначально так хотел сделать, только у меня при запуске формы этот ?parent_id постоянно запрашивался, хоть я и в Load формы его определил. Вот и решил особо не мудрить, а поставить Set filter. Поправлю, спасибо еще раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 20:22 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
если это форма, то правильнее добавить форме свойство parent_id, а в запросе Код: sql 1.
я примерно так в курсорадаптере делаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 20:36 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Dima Tесли это форма, то правильнее добавить форме свойство parent_id, а в запросе Код: sql 1.
я примерно так в курсорадаптере делаю. Всё, вроде всё получилось. Только со свойством формы как-то не пошло, а получилось так: DE Autoopentables = .f. А в форме Load Код: sql 1. 2. 3. 4.
далее уже указываю текущее значение ключа в init и requery и на первый взгляд все хорошо. Иначе никак - при запуске формы хочет значение и все тут. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 20:58 |
|
Вопрос по local view
|
|||
---|---|---|---|
#18+
Вставь код в DE.BeforeOpenTables() и убери DE Autoopentables = .f. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2016, 21:00 |
|
|
start [/forum/topic.php?fid=41&fpage=20&tid=1582181]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 159ms |
0 / 0 |