|
|
|
А как узнать... ?
|
|||
|---|---|---|---|
|
#18+
Работаю с ViewБ в 5 режиме буферизации. Как при сбросе буфера узнать, что запись была добавлена и тут же удалена ? Как я понимаю, с ней ничего делать не надо ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 10:48:13 |
|
||
|
А как узнать... ?
|
|||
|---|---|---|---|
|
#18+
Если речь идет о том, что запись была добавлена во View и тут же (во View) была удалена. То такая запись НЕ будет сброшена в итоговую таблицу. Она будет просто проигнорирована. После обновления View командой Requery() от такой записи вообще не останется никаких следов. Ну, а если хочется ДО сброса буфера найти такие записи, то это можно сделать просто найдя те записи у которых выполняется условие: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 11:37:20 |
|
||
|
А как узнать... ?
|
|||
|---|---|---|---|
|
#18+
Deleted()=.T. , это все что было нужно. Спасибо. Только непонятно как это буфер знает Deleted(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 15:57:15 |
|
||
|
А как узнать... ?
|
|||
|---|---|---|---|
|
#18+
А как кто сортирует вьюху ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 17:01:28 |
|
||
|
А как узнать... ?
|
|||
|---|---|---|---|
|
#18+
КусакинА как кто сортирует вьюху ? Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 18:38:27 |
|
||
|
А как узнать... ?
|
|||
|---|---|---|---|
|
#18+
Hi Кусакин! Режим буферизации временно переключается в 3 - потом INDEX ON - потом вернуть в 5. Ессно что изменения надо сохранить - с имеющимися изменениями это не прокатит. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 01:10:48 |
|
||
|
А как узнать... ?
|
|||
|---|---|---|---|
|
#18+
Да, на счет индекса я в MSDN прочитал и сам, интересует вопрос такой, собственно. Имеем View, ну допустим: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Хотя не понятно, почему бы и не сработать. Тогда можнго было бы поднимать сортированные реальные данные буфера через REFRESH() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 11:41:05 |
|
||
|
А как узнать... ?
|
|||
|---|---|---|---|
|
#18+
Hi Кусакин! 1) Параметры в запросе выделяются знаком ? 2) VFP8 очень болезненно относится к параметрам являющимся макро. В VFP7 и в VFP9 таких проблем нет. 3) Не Refresh(), а Requery() - т.е. полностью перезапрос всего курсора... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 02:25:10 |
|
||
|
А как узнать... ?
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov, зачем мне перезапрос всего курсора. У меня еще буфер не сброшен, мне нужен именно Refresh. Тоесть просто обновить текущий порядок записей в соответсвии с ORDER BY без перезапроса источника. Мне нужно именно упорядочивание буфера и без гемороя типа Index on. Как я написал, работает через раз. Где-то накосячил или чего-то не учел, вот и спрашиваю, чего я не учел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 11:12:57 |
|
||
|
А как узнать... ?
|
|||
|---|---|---|---|
|
#18+
А ты в курсе, что Refresh() обновляет только одну запись? ORDER BY - это опция, изменяющая порядок физического следования записей. Т.е. ты хочешь, чтобы при изменении одной записи изменился порядок физического следования всех записей? Без "геммороя" с индексом или полного перестроения запроса по Requery() это невозможно сделать в принципе. Удивительно, что у тебя это хотя бы "иногда" срабатывает. Насчет "буфер не сборшен". А ЧТО делает команда Refresh()? Она ведь должна заменить значения в текущей записи у клиента на те, которые сейчас реально находятся в таблице (на сервере). Если для текущей записи "буфер не сброшен", то эта команда просто не сработает. Будет сообщение об ошибке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 11:37:21 |
|
||
|
А как узнать... ?
|
|||
|---|---|---|---|
|
#18+
Ну хорошо. Есть у меня во вьюхе поле. Я хочу сделать сортировку по полю ASC и DES, Нужно создать 2 индекса. А у меня таких полей десятки :) Что прикажите пладить индексы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 11:54:02 |
|
||
|
А как узнать... ?
|
|||
|---|---|---|---|
|
#18+
КусакинНу хорошо. Есть у меня во вьюхе поле. Я хочу сделать сортировку по полю ASC и DES, Нужно создать 2 индекса. А у меня таких полей десятки :) Что прикажите пладить индексы ? Да. "Прикажу". А какие есть варианты? Тебе же требуется сортировать данные в буфере . Т.е. их физически еще нет в исходной таблице. Даже в буфере исходной таблицы их еще нет. Команда Select-SQL (Local View) их в принципе не увидит. А какие есть возражения против использования индексов? Как правило, общее количество записей в Local View невелико (в противном случае теряется смысл использования Local View). Это значит, что индексация не должна занимать много времени. Логика примерно такая: в момент открытия Local View индексируешь ее по всем полям, затем переходишь в 5 режим буферизации и правишь себе данные. Несколько больше времени на открытие формы, но никаких проблем с упорядочиванием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 13:23:20 |
|
||
|
А как узнать... ?
|
|||
|---|---|---|---|
|
#18+
Да, в исходной таблице нет. Но я же сделал правила обновления и указал ключевое поле. Не понятно тут момент такой : с какого перепугу VFP когда сбрасывет буфер будет смотреть на порядок записей. Вот вьюха, порядок условного 1 3 2, вот порядок 1 2 3, а вот 3 2 1. Какая разница вьюхе так в ней лежат записи, она все равно сбросит буфер не по порядковому номеру а по правилам обновения, не раз тут описанным. Возникуает закономерный вопрос, что, кроме как используя индекс, я не могу никак отсортировать запись по выбранному полю ? К тому же данных не мало, совсем не мало, это при и учете того, что все таблицы нормализованы и результирующим запросе "тож все в порядке". НУ просто предментная область такая, что приходиться работать с много - много - много данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 14:13:24 |
|
||
|
А как узнать... ?
|
|||
|---|---|---|---|
|
#18+
Ты пропустил что-то в самом начале. Чтение данных идет по такой цепочке Исходная таблица - 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. Они будут уничтожены непосредственно перед повторным запросом. Остается единственный вариант - это использование индексов. Что и было предложено с самого начала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 14:45:31 |
|
||
|
А как узнать... ?
|
|||
|---|---|---|---|
|
#18+
Hi Владимир! Refresh() на самом деле не ТЕКУЩИЕ значения полей "обновляет", а "старые" - те что OldVal(). При этом если данная запись НЕ изменялась - то будут отображены эти новые "старые" значения (поскольку до начала редактирования фокс не делает никакого "расслоения") - если же данные уже изменены - то пришедшие из таблицы данные лягут "под" эти самые "новые" значения. Насчёт сортировки никаких возражений - при помощи Refresh() просто нереально изменить порядок следования записей в курсоре... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2005, 01:05:53 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=297&tid=1593261]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
83ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 379ms |

| 0 / 0 |
