powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Requery()
7 сообщений из 7, страница 1 из 1
Requery()
    #33566622
men dea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На основе таблицы Myfile (5-буферизация) строю LV lvMyfile (5-буферизация) с фильтром-параметром по idOTDEL. Я хочу после редактирования в LV с разными значениями параметра, потом уже решать: "Сохранять или не сохранять изменения?"

Как я понимаю, после изменения параметра LV обновляется. Поэтому перед очередной сменой значения параметра LV я должен делать TableUpdate(.t.,.t.,'lvMyfile'), чтобы скинуть изменения в буфер таблицы. А в конце-концов, наигравшись с различными вариантами LV, сделать
Код: plaintext
1.
TableUpdate(.t.,.t.,'lvMyfile')
TableUpdate(.t.,.t.,'Myfile'),


Т.е. последовательность действий, например, при удалении:
0) Requery('lvMyfile') cо значением-1 для параметра для LV
Код: plaintext
1.
2.
3.
4.
5.
 1 ). Delete In lvMyfile
 2 ). TableUpdate(.t.,.t.,'lvMyfile')
...
 3 ) Requery('lvMyfile') cо значением- 2  для параметра для LV
...
n).  TableUpdate(.t.,.t.,'Myfile')
Но при такой схеме, после возвращения к LV c 1-м значением параметра, все удаленные записи вновь оживают.
Видимо, Requery('lvMyfile') работает не с буфером таблицы, а с ней самой? (В Help VFP-9 на эту функцию не уточняется, откуда она черпает данные)

Тогда как реализовать мою мечту? Соорудить новое LV верхом на уже имеющемся LV?
Т.е. сделать еще одну "кальку с листа", как выражается Владимир М., в своей статье о LV и буферизации?
...
Рейтинг: 0 / 0
Requery()
    #33567752
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда в любом SQL-запросе, не обязательно в Local View, указывается имя базы, т.е. синтаксис вроде

SELECT ... FROM data3!kart_doc

То это означает "брать данные непосредственно из таблицы" (файла).

А вот если используется синтаксис вроде

SELECT ... FROM kart_doc

то в этом случае сначала ищется рабочая область, в которой открыта таблица с алиасом (заметь, НЕ именем таблицы), совпадающем с указанным именем. И вот только если такой рабочей области не найдено, то далее осуществляется поиск таблицы (файла) с указанным именем.

Опция (Buffering=.T.) - имеет смысл при буферизации, а буферизация - это свойство рабочей области, а не самой таблицы. Отсюда и такой различный результат.

Т.е. надо отредактировать выражение Select-SQL с тем, чтобы убрать имя контейнера базы данных.
...
Рейтинг: 0 / 0
Requery()
    #33578619
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Владимир!

> Т.е. надо отредактировать выражение Select-SQL с тем, чтобы убрать имя
> контейнера базы данных.

И добавить в текст запроса опцию WITH (Buffering = .T.) чтобы при выборке
учитывалось текущее состояние буфера, а не "начальное". При этом вроде бы
перестаёт работать визуальная часть View Designer-а, но не думаю что это
очень уж существенная потеря ;)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Requery()
    #33579965
men dea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попутно возник такой вопрос:
Доселе я пользовался созданным в Дизайнере LV, таким образом, что LV оставался в дизайнерской оболочке вместе с БД. И я к нему обращался, фактически, как к обычному Alias, когда делал Add в DataEnvironment какой-нибудь формы. Само собой, в Дизайнере я мог просмотреть и сгенерированный код и вносить в него изменения.
Но при коррекции LV, старый код реанимировался. А можно ли этот код с моими изменениями взять и вставить в куда-нибудь в Load формы (или куда там его еще обычно вставляют? вопрос!), а потом уже пользоваться им, как обычным Alias.
Или это - прерогатива Дизайнера содержать все вьюшки у себя "дома"? :)
А то их так много накапливается.... :(
...
Рейтинг: 0 / 0
Requery()
    #33582651
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi men dea!

> Доселе я пользовался созданным в Дизайнере LV, таким образом, что LV
> оставался в дизайнерской оболочке

LV не имеет никакой связи с дизайнером. И разницы между View созданным в
дизайнере или созданным командой CREATE SQL VIEW нет никакой.

> вместе с БД.

Именно в БД и хранится описание View - при этом дизайнер тут совершенно не
важен.

> Но при коррекции LV, старый код реанимировался.

Непонятно.

> А можно ли этот код с моими изменениями взять и вставить в куда-нибудь в
> Load формы

Нет так делать не стоит - View создаётся 1 раз и всё - при этом способ его
создания значения не имеет. Пересоздавать же view при каждом запуске формы
совершенно не нужно - а в многопользовательской базе так и вовсе нельзя!

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Requery()
    #33629182
men dea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"При этом вроде бы перестаёт работать визуальная часть View Designer-а, но не думаю что это
очень уж существенная потеря ;)..."

Какая визуальная часть имеется в виду, я не понял. Вроде все видно, за исключением следующего момента:
Согласно вашим рецептам, командным способом я создал представление: с WITH (Buffering=.T.) В дизайнере посмотрел SQL-код новоявленного LV. Внешне ничем не отличается от представления, созданного дизайнером, хотя работает, конечно, иначе.
Теперь вопросы:
1. Можно ли создать представление, учитывающее буферизацию области, дизайнерским способом?

2. Каким либо программным способом, кроме косвенных, можно определить разницу между представлениями с WITH (Buffering=.T.) и WITH(Buffering=.F.)?

3. Прочитал статью Владимира М. о "2-х кальках при LV и буферизации таблицы" (извиняюсь, что не даю ссылку, но, думаю, автор вспомнит, о чем речь)

Есть ли принципиальная разница, если работаешь с Buffering=.T. или Buffering=.F. , если таблица содержит AutoInc-поле, кроме существования возможности заглянуть в будущее его значения? Мне смутно представляется цель, ради которой мне это потребуется?
По-моему, Фокс сам все сделает в момент внесения новой записи в таблицу, избавив меня от излишних хлопот. Или же я сам в представлении должен присвоить это "будущее значение" автоинкрементному полю, ибо автоинкрементность не наследуется LV?
Или я опять все не так понимаю? :)
...
Рейтинг: 0 / 0
Requery()
    #33636031
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
men dea"При этом вроде бы перестаёт работать визуальная часть View Designer-а, но не думаю что это
очень уж существенная потеря ;)..."

Какая визуальная часть имеется в виду, я не понял. Вроде все видно, за исключением следующего момента:
Согласно вашим рецептам, командным способом я создал представление: с WITH (Buffering=.T.) В дизайнере посмотрел SQL-код новоявленного LV. Внешне ничем не отличается от представления, созданного дизайнером, хотя работает, конечно, иначе.
Теперь вопросы:
1. Можно ли создать представление, учитывающее буферизацию области, дизайнерским способом?
А в чем проблема? Создаешь в дизайнере, потом влезаешь в код SQL (там где ты его смотришь) и ручками вносишь исправления:

1) Необходимо выброисть ссылку на базу данных
2) Добавить хинт with (buffering = .T.)

Т.е., если сам дизайнер строит конструкцию вида

FROM MyBase!MyTable

то после исправления должно получиться

FROM MyTable with (buffering = .T.)

Но вот после этого дизайнер и начнет "капризничать". Дескать - не могу показать таблицы-источники. Правка будет возможна только в самом коде SQL без средств собственно дизайнера


men dea2. Каким либо программным способом, кроме косвенных, можно определить разницу между представлениями с WITH (Buffering=.T.) и WITH(Buffering=.F.)?
В смысле? Что именно необходимо определить? Есть такая опция или нет?

men dea3. Прочитал статью Владимира М. о "2-х кальках при LV и буферизации таблицы" (извиняюсь, что не даю ссылку, но, думаю, автор вспомнит, о чем речь)

Есть ли принципиальная разница, если работаешь с Buffering=.T. или Buffering=.F. , если таблица содержит AutoInc-поле, кроме существования возможности заглянуть в будущее его значения? Мне смутно представляется цель, ради которой мне это потребуется?
Зависит от того, находится ли источник запроса в режиме буферизации или нет. И откуда запрос будет брать данные - из буфера или из исходной таблицы.

В общем, может быть разница, а может - не быть...

men deaПо-моему, Фокс сам все сделает в момент внесения новой записи в таблицу, избавив меня от излишних хлопот. Или же я сам в представлении должен присвоить это "будущее значение" автоинкрементному полю, ибо автоинкрементность не наследуется LV?
Или я опять все не так понимаю? :)
Ты сначала определись, что именно хочешь получить. Т.е. какую цель перед собой ставишь. Затем уже можно будет говорить об использовании тех или иных инструментов.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Requery()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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