powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Воросы о курсоре (Select-SQL) для Grid + Page Frame
3 сообщений из 3, страница 1 из 1
Воросы о курсоре (Select-SQL) для Grid + Page Frame
    #33429663
men dea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выбираю клиента в родительской файле client, чтобы поработать с его заказами в дочернем файле zakaz. Файл zakaz -большой и записей в нем -много. Но по каждому отдельному клиенту около 10.
Итак, вызываю:
Код: plaintext
DO Form  Zakaz With client.idClient

На этой форме размещается Grid с колонками:
1. idZakaz (AutoInc)
2. dDate,
3. lMade(признак исполнения) - минимум информации.
и многостраничный PageFrame с информацией по текущему заказу и сведениями о клиенте.

Раньше для выборки я пользовался SET FILTER TO zakaz.nClient=client.idClient, но файл располнел и Set Filter стал ленивым. Приходится от его услуг отказаться в пользу SELECT-sql.

В Init через выбираю нужный минимум информации и забрасываю его в Grid:

Код: plaintext
1.
2.
3.
4.
5.
6.
Select idZakaz, dDate, lMade ;
		FROM zakaz;
		Into Cursor clientzakaz Readwrite;
		WHERE zakaz.nClient=client.idClient

SELECT clientzakaz
GO TOP
....
PageFrame строю на основе записи из файла zakaz, для чего делаю:
Код: plaintext
=SEEK(clientzakaz.nZakaz,'zakaz'). 
На основе PageFrame и, соответственно, таблицы zakaz я провожу операции по корректировке записей.

ВОПРОС 1. Стоит ли делать такое распределение обязанностей между курсором и таблицей? Или лучше всю информацию выбирать в CURSOR clientzakaz? А потом, по мере каких-то изменений в нем, скидывать это все в таблицу zakaz?

ВОПРОС 2. Пока я играю с курсором clientzakaz, в таблице zakaz могут происходить изменения по сети. Как мне их отследить?

Должен ли я при каждом BeforeRowColChange перечитывать курсор:

Код: plaintext
1.
ZAP
INSERT ... INTO CURSOR clientzakaz 
?

Или курсор сам обновляется, а изменения станут мне видны в Grid, когда я "шагну" на измененную запись?

ВОПРОС 3. Имеет ли смысл устанавливать на CURSOR clientzakaz режим буферизации или его проще в случае отказа перечитать заново?
...
Рейтинг: 0 / 0
Воросы о курсоре (Select-SQL) для Grid + Page Frame
    #33429698
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
men dea...На этой форме размещается Grid с колонками:
1. idZakaz (AutoInc)
2. dDate,
3. lMade(признак исполнения) - минимум информации.
и многостраничный PageFrame с информацией по текущему заказу и сведениями о клиенте.
Вот idZakaz (AutoInc) показывать ненадо. Нужно сделать дополнительное поле например nZakaz - номер заказа и его показывать. Т.к. возможен случай, что в следующем году номер заказа начнется с 1. Возможно дублирование номера. Это надо разрешить.
men dea...В Init через выбираю нужный минимум информации и забрасываю его в Grid:
Код: plaintext
1.
2.
3.
4.
5.
6.
Select idZakaz, dDate, lMade ;
		FROM zakaz;
		Into Cursor clientzakaz Readwrite;
		WHERE zakaz.nClient=client.idClient

SELECT clientzakaz
GO TOP
....
Лучше оформлять через параметризованное представление
команда CREATE SQL VIEW... WHERE zakaz.nClient=?idClient ...
(прочитай обязательно про эту команду). Поля оформить обновляемыми. И здесь выбрать все поля относящиеся к заказам.
men dea...PageFrame строю на основе записи из файла zakaz, для чего делаю:
Код: plaintext
=SEEK(clientzakaz.nZakaz,'zakaz'). 
На основе PageFrame и, соответственно, таблицы zakaz я провожу операции по корректировке записей.PageFrame заполняй на основе параметризованного представления.
men dea...ВОПРОС 1. Стоит ли делать такое распределение обязанностей между курсором и таблицей? Или лучше всю информацию выбирать в CURSOR clientzakaz? А потом, по мере каких-то изменений в нем, скидывать это все в таблицу zakaz?Посмотреть про буфферизацию. ВладимирМ в статьях и в форуме очень много рассказывал.
men dea...ВОПРОС 2. Пока я играю с курсором clientzakaz, в таблице zakaz могут происходить изменения по сети. Как мне их отследить?Как раз строить идеологию на представлениях и пользоваться функциями REQUERY(), TABLEUPDATE().
men dea...Должен ли я при каждом BeforeRowColChange перечитывать курсор:
Код: plaintext
1.
ZAP
INSERT ... INTO CURSOR clientzakaz 
?
Или курсор сам обновляется, а изменения станут мне видны в Grid, когда я "шагну" на измененную запись?Само ничего не бывает. Но тут нужно задать вопрос:"У тебя несколько пользователей могут одновременно редактировать один и тот же заказ???"
men dea...ВОПРОС 3. Имеет ли смысл устанавливать на CURSOR clientzakaz режим буферизации или его проще в случае отказа перечитать заново?На представлении режим буферизации надо устанавливать. Насколько помнится по Default - 3 режим буфферизации.
...
Рейтинг: 0 / 0
Воросы о курсоре (Select-SQL) для Grid + Page Frame
    #33431844
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi men dea!

> Стоит ли делать такое распределение обязанностей между курсором и
> таблицей?

Нет не стоит.

> Или лучше всю информацию выбирать в CURSOR clientzakaz?

Лучше сделать 2 представления - одно на клиента (там будет одна запись, но
это несущественно), второе на строки заказа относящиеся к данному клиенту.
Одно представление "соединяющее" оба эти тоже можно делать - но только в том
случае если полей немного, и таблица клиентов НЕ ИЗМЕНЯЕТСЯ из этой формы -
т.е. хорошее правило - одно представление - одна обновляемая из него
таблица. Исключения конечно есть, но не для связи типа 1-ко-многим.

> А потом, по мере каких-то изменений в нем, скидывать это все в таблицу
> zakaz?

скидывать надо по команде пользователя - когда он решит, что то что он
наводил пора сохранять. При закрытии формы, переходе на другого клиента и
т.п. также стоит посмотреть есть ли изменения, и если есть - то спросить что
с ними делать - сохранять или нет.

> Пока я играю с курсором clientzakaz, в таблице zakaz могут происходить
> изменения по сети. Как мне их отследить?

Никак. Да и это ненужно. При сохранении надо отслеживать подобные
конфликты - т.е. "пока я вбивал кто-то уже чего-то поменял - что теперь
делать - перезаписать моими данными, или оставить о что другие сделали".
Предотвращать такие ситуации конечно теоретически можно, но практически в
этом смысла никакого нет - т.е. открыл "дядя Вася" клиента А, а сам пошёл на
обед - теперь все сидят и нервно ждут - когда же он вернётся и "отпустит"
данные...
Автообновление (на основе таймера) тоже не советую - разве что в режиме
ReadOnly, и обязательно чтоб пользователь ЗНГАЛ о таком обновлении и мог его
отключить - нет ничего хуже, когда пользователь смотрит какие-то записи,
считает там чего-то у себя в уме/на бумажка/на калькуляторе, а в это самое
время на экране происходит нехорошее "шевеление" - только что стояла циферка
10, а через секунду уже стоит 20!

> Должен ли я при каждом BeforeRowColChange перечитывать курсор:

Нет, лучше так не делать по причинам указанным выше. Вот если ты делаешь
перемещение в "главном" курсоре (т.е. в списке клиентов идёшь на другого
клиента - хотя по ходу ты такой фишки в этой форме не делаешь, оставляя
навигацию в другой форме - вызывающей эту) - тогда надо перезапросить
курсоры (для View это банальное Requery("MyAlias"))

> Или курсор сам обновляется, а изменения станут мне видны в Grid, когда я
> "шагну" на измененную запись?

Нет, ни с view, ни с "просто запросом" этого не произойдёт.

> Имеет ли смысл устанавливать на CURSOR clientzakaz режим буферизации

Да, если вносятся изменения - то только таким образом можно отследить что же
именно было изменено. Впрочем при работе с Local View просто нет никакой
возможности отказаться от буферизации :) При этом для простоты лучше
использовать 5-й режим - как полностью управляемый тобой - без дурных
"авто-сохранений"...

> или его проще в случае отказа перечитать заново?

Не понял. В случае если изменения сохранять не нужно, следует дать
TableRevert(). А уж нужно после этого получить "свежие" данные, или можно
оставить то что и было (после отката мы получаем "исходное" состояние - как
было на момент начала редактирования - или точнее на момент последнего
перезапроса).

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Воросы о курсоре (Select-SQL) для Grid + Page Frame
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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