powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / А как узнать... ?
15 сообщений из 15, страница 1 из 1
А как узнать... ?
    #33319156
Кусакин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работаю с ViewБ в 5 режиме буферизации. Как при сбросе буфера узнать, что запись была добавлена и тут же удалена ? Как я понимаю, с ней ничего делать не надо ?
...
Рейтинг: 0 / 0
А как узнать... ?
    #33319331
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если речь идет о том, что запись была добавлена во View и тут же (во View) была удалена. То такая запись НЕ будет сброшена в итоговую таблицу. Она будет просто проигнорирована.

После обновления View командой Requery() от такой записи вообще не останется никаких следов.

Ну, а если хочется ДО сброса буфера найти такие записи, то это можно сделать просто найдя те записи у которых выполняется условие:

Код: plaintext
1.
2.
3.
4.
5.
select MyView
SET DELETED OFF
SCAN FOR Recno()< 0  AND Deleted()=.T.
...
ENDSCAN
...
Рейтинг: 0 / 0
А как узнать... ?
    #33320499
Кусакин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deleted()=.T. , это все что было нужно.
Спасибо.
Только непонятно как это буфер знает Deleted().
...
Рейтинг: 0 / 0
А как узнать... ?
    #33320763
Кусакин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как кто сортирует вьюху ?
...
Рейтинг: 0 / 0
А как узнать... ?
    #33321038
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КусакинА как кто сортирует вьюху ?
Код: plaintext
1.
2.
3.
SELECT <LV>
INDEX ON eExpression TO IDXFileName | TAG TagName
  [ COLLATE cCollateSequence ] [OF CDXFileName] [FOR lExpression]
  [COMPACT] [ASCENDING | DESCENDING] [UNIQUE | CANDIDATE] [ADDITIVE]
...
Рейтинг: 0 / 0
А как узнать... ?
    #33321360
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Кусакин!

Режим буферизации временно переключается в 3 - потом INDEX ON - потом
вернуть в 5. Ессно что изменения надо сохранить - с имеющимися изменениями
это не прокатит.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
А как узнать... ?
    #33322055
Кусакин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, на счет индекса я в MSDN прочитал и сам, интересует вопрос такой, собственно.
Имеем View, ну допустим:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT Task.uid, Task.mcod, Task.taskrus, Task.taskeng, Task.magor,;
  Task.tcomment, Task.uid_tindex, Tindex.mcode;
 FROM ;
     planing!task ;
    INNER JOIN planing!tindex ;
   ON  Task.uid_tindex = Tindex.uid;
 ORDER BY Task.magor
Попробовал его превратить в:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public cOrder as String
cOrder = "Task.magor"
SELECT Task.uid, Task.mcod, Task.taskrus, Task.taskeng, Task.magor,;
  Task.tcomment, Task.uid_tindex, Tindex.mcode;
 FROM ;
     planing!task ;
    INNER JOIN planing!tindex ;
   ON  Task.uid_tindex = Tindex.uid;
ORDER BY &cOrder
Фиг там.
Хотя не понятно, почему бы и не сработать.
Тогда можнго было бы поднимать сортированные реальные данные буфера через REFRESH()
...
Рейтинг: 0 / 0
А как узнать... ?
    #33323951
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Кусакин!

1) Параметры в запросе выделяются знаком ?
2) VFP8 очень болезненно относится к параметрам являющимся макро. В VFP7 и в
VFP9 таких проблем нет.
3) Не Refresh(), а Requery() - т.е. полностью перезапрос всего курсора...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
А как узнать... ?
    #33324429
Кусакин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Korolyov, зачем мне перезапрос всего курсора. У меня еще буфер не сброшен, мне нужен именно Refresh. Тоесть просто обновить текущий порядок записей в соответсвии с ORDER BY без перезапроса источника. Мне нужно именно упорядочивание буфера и без гемороя типа Index on.
Как я написал, работает через раз. Где-то накосячил или чего-то не учел, вот и спрашиваю, чего я не учел.
...
Рейтинг: 0 / 0
А как узнать... ?
    #33324531
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты в курсе, что Refresh() обновляет только одну запись? ORDER BY - это опция, изменяющая порядок физического следования записей. Т.е. ты хочешь, чтобы при изменении одной записи изменился порядок физического следования всех записей?

Без "геммороя" с индексом или полного перестроения запроса по Requery() это невозможно сделать в принципе. Удивительно, что у тебя это хотя бы "иногда" срабатывает.

Насчет "буфер не сборшен". А ЧТО делает команда Refresh()? Она ведь должна заменить значения в текущей записи у клиента на те, которые сейчас реально находятся в таблице (на сервере). Если для текущей записи "буфер не сброшен", то эта команда просто не сработает. Будет сообщение об ошибке.
...
Рейтинг: 0 / 0
А как узнать... ?
    #33324593
Кусакин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну хорошо. Есть у меня во вьюхе поле. Я хочу сделать сортировку по полю ASC и DES, Нужно создать 2 индекса. А у меня таких полей десятки :) Что прикажите пладить индексы ?
...
Рейтинг: 0 / 0
А как узнать... ?
    #33324983
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КусакинНу хорошо. Есть у меня во вьюхе поле. Я хочу сделать сортировку по полю ASC и DES, Нужно создать 2 индекса. А у меня таких полей десятки :) Что прикажите пладить индексы ?
Да. "Прикажу". А какие есть варианты?

Тебе же требуется сортировать данные в буфере . Т.е. их физически еще нет в исходной таблице. Даже в буфере исходной таблицы их еще нет. Команда Select-SQL (Local View) их в принципе не увидит.

А какие есть возражения против использования индексов? Как правило, общее количество записей в Local View невелико (в противном случае теряется смысл использования Local View). Это значит, что индексация не должна занимать много времени.

Логика примерно такая: в момент открытия Local View индексируешь ее по всем полям, затем переходишь в 5 режим буферизации и правишь себе данные. Несколько больше времени на открытие формы, но никаких проблем с упорядочиванием.
...
Рейтинг: 0 / 0
А как узнать... ?
    #33325176
Кусакин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, в исходной таблице нет. Но я же сделал правила обновления и указал ключевое поле. Не понятно тут момент такой : с какого перепугу VFP когда сбрасывет буфер будет смотреть на порядок записей. Вот вьюха, порядок условного 1 3 2, вот порядок 1 2 3, а вот 3 2 1. Какая разница вьюхе так в ней лежат записи, она все равно сбросит буфер не по порядковому номеру а по правилам обновения, не раз тут описанным. Возникуает закономерный вопрос, что, кроме как используя индекс, я не могу никак отсортировать запись по выбранному полю ?
К тому же данных не мало, совсем не мало, это при и учете того, что все таблицы нормализованы и результирующим запросе "тож все в порядке". НУ просто предментная область такая, что приходиться работать с много - много - много данными.
...
Рейтинг: 0 / 0
А как узнать... ?
    #33325310
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты пропустил что-то в самом начале.

Чтение данных идет по такой цепочке

Исходная таблица - Local View

Запись данных происходит по такой цепочке

Буфер Local View - Local View - Буфер исходной таблицы - исходная таблица

Ну, исходную таблицу, как правило, не буферизируют, поэтому запись данных происходит обычно по укороченной цепочке

Буфер Local View - Local View - исходная таблица

Когда ты вносишь изменения в Local View, то реально все эти изменения записываются в буфер Local View. Т.е. их физически больше нигде нет.

Ни команда Refresh(), ни команда Requery() не смогут тебе ничем помочь. Эти команды призваны повторить операцию чтения данных . Т.е. они просто возьмут то, что реально лежит в исходной таблице.

Операции чтения и записи - это две разные операции. Не надо думать, что сбросив изменения ты тут же и обновил Local View. Вовсе нет.


Теперь зайдем с другой стороны.

Физически, Local View - это результат работы команды Select-SQL. Т.е. по сути, это временная таблица расположенная на машине клиента. Если опустить термин "временная", то во всем остальном это полноценная таблица.

Какие есть реальные возможности изменить порядок следования записей в таблице?

Использовать индекс

Физически отсортировать записи в нужном порядке

Так вот, опция ORDER BY - это и есть "физически отсортировать записи в нужном порядке". По сути, создать заново временную таблицу, но уже в нужном порядке.

Теперь, что реально ты имеешь.

У тебя есть Local View. Ты вносишь изменения в буфер Local View. И хочешь, чтобы записи в Local View немедленно выстроились в нужном порядке в соответствии с внесенными изменениями.

Опция ORDER BY - это опция, используемая в момент выполнения запроса. Команды Select-SQL. Естесственно, это происходит в момент переоткрытия Local View или при подаче команды Requery(). Т.е. при операции чтения данных. Причем чтения вообще всех записей, попадающих в выборку.

В твоем случае это ни в коем случае не годиться. Если опустить тот момент, что ты получишь сообщение об ошибке, то в результате ты просто потеряешь все те изменения, которые внес в буфер Local View. Они будут уничтожены непосредственно перед повторным запросом.

Остается единственный вариант - это использование индексов. Что и было предложено с самого начала.
...
Рейтинг: 0 / 0
А как узнать... ?
    #33326265
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Владимир!

Refresh() на самом деле не ТЕКУЩИЕ значения полей "обновляет", а "старые" -
те что OldVal(). При этом если данная запись НЕ изменялась - то будут
отображены эти новые "старые" значения (поскольку до начала редактирования
фокс не делает никакого "расслоения") - если же данные уже изменены - то
пришедшие из таблицы данные лягут "под" эти самые "новые" значения.
Насчёт сортировки никаких возражений - при помощи Refresh() просто нереально
изменить порядок следования записей в курсоре...

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


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