powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Позиционирование при перечитывании запроса и GridMode
25 сообщений из 84, страница 2 из 4
Позиционирование при перечитывании запроса и GridMode
    #39730621
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов ЮрийVirtual StudentТ.е. никто не рассматривает обычный DataSet.Locate('id', id, []) как вариант?
на второй картинке действие локейта. Они с первой отличаются?
Остается только фокус переместить на нужную запись.
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730632
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual StudentЛеонов Юрийпропущено...

на второй картинке действие локейта. Они с первой отличаются?
Остается только фокус переместить на нужную запись.
...а еще выполнить горизонтальный и вертикальный скроллинг в гриде, ага, с учетом сортировки и фильтрации...
Для чего вообще пероткрывать набор данных, что за странное желание делать ненужные вещи и после бороться с послествиями...
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730633
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual StudentЛеонов Юрийпропущено...

на второй картинке действие локейта. Они с первой отличаются?
Остается только фокус переместить на нужную запись.

фокус и так на нужной, сама строка улетела. Я понятно говорю или не поймете чего я хочу добиться?
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730634
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов Юрийфокус и так на нужной, сама строка улетела. Я понятно говорю или не поймете чего я хочу добиться?
"...когда я отрубаю петуху голову, он не поёт. Надо, чтобы пел."
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730635
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл ЭраVirtual Studentпропущено...

Остается только фокус переместить на нужную запись.
...а еще выполнить горизонтальный и вертикальный скроллинг в гриде, ага, с учетом сортировки и фильтрации...
Для чего вообще пероткрывать набор данных, что за странное желание делать ненужные вещи и после бороться с послествиями...

Поставьте GridMode=True и вы поймете зачем. Не от хорошей жизни.

Если вы знаете правильный способ - поделитесь. Я же не утверждаю что изобрел новое колесо.
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730641
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл ЭраЛеонов Юрийфокус и так на нужной, сама строка улетела. Я понятно говорю или не поймете чего я хочу добиться?
"...когда я отрубаю петуху голову, он не поёт. Надо, чтобы пел."

Задрачивать и я умею. Вы мне ни одного дельного совета не дали, только фигней страдаете. Вы ответ на мой вопрос знаете? Так поделитесь. А если нет, то нечего флудить.
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730647
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы редактируете данные хранимой процедурой. Она вам и возвращает ответ произошло редактирование(сохранение) или нет.
Логично предполагаю, что данные редактируются в не DB контролах.
Я же вам предлагаю отвязаный датасет в памяти и DB-Контролы + редактирование хранимкой. Хранимка вернуда ДА - Post, НЕТ-Cancel. И никакого переоткрытия датасета.
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730652
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для особо занудствующих и мучающихся вопросом "а зачем переоткрывать запрос?".
Представьте себе ситуацию, когда с одной формой работают одновременно несколько пользователей. Чисто теоретически.
Один что-то поменял, запустил для этих изменений другой процесс. Тут второй пользователь отмечает другие записи, чтобы совершить с ними какие-то действия. Для этого нужно учитывать статус записи и прочие настройки, потому как невовремя вызванная процедура может внести непоправимые изменения в базу. Вариантов дофигища.

Задан был вопрос как перейти на запись и возобновить положение в сетке. Но тут уже скатились до того "а зачем переоткрывать"...
Значит надо, без лишней надобности не стал бы делать это
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730654
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrВы редактируете данные хранимой процедурой. Она вам и возвращает ответ произошло редактирование(сохранение) или нет.
Логично предполагаю, что данные редактируются в не DB контролах.
Я же вам предлагаю отвязаный датасет в памяти и DB-Контролы + редактирование хранимкой. Хранимка вернуда ДА - Post, НЕТ-Cancel. И никакого переоткрытия датасета.

ХП может изменить значения нескольких полей, как тогда быть?
Не смотрите на пример, это частный случай
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730662
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов ЮрийДля особо занудствующих и мучающихся вопросом "а зачем переоткрывать запрос?".
Представьте себе ситуацию, когда с одной формой работают одновременно несколько пользователей. Чисто теоретически.
Один что-то поменял, запустил для этих изменений другой процесс. Тут второй пользователь отмечает другие записи, чтобы совершить с ними какие-то действия. Для этого нужно учитывать статус записи и прочие настройки, потому как невовремя вызванная процедура может внести непоправимые изменения в базу. Вариантов дофигища.

Задан был вопрос как перейти на запись и возобновить положение в сетке. Но тут уже скатились до того "а зачем переоткрывать"...
Значит надо, без лишней надобности не стал бы делать это

То есть, никаких причин, чтобы переоткрывать - нет. Видишь, как все просто.
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730664
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов Юрий...ХП может изменить значения нескольких полей, как тогда быть?
...
Перечитывай ОДНУ запись. Ту, которая изменялось. Одну - единственную.
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730688
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Леонов ЮрийДля особо занудствующих и мучающихся вопросом "а зачем переоткрывать запрос?".
Представьте себе ситуацию, когда с одной формой работают одновременно несколько пользователей. Чисто теоретически.
Один что-то поменял, запустил для этих изменений другой процесс. Тут второй пользователь отмечает другие записи, чтобы совершить с ними какие-то действия. Для этого нужно учитывать статус записи и прочие настройки, потому как невовремя вызванная процедура может внести непоправимые изменения в базу. Вариантов дофигища.

Задан был вопрос как перейти на запись и возобновить положение в сетке. Но тут уже скатились до того "а зачем переоткрывать"...
Значит надо, без лишней надобности не стал бы делать это

Ещё и два человека могут "одновременно" одну запись пробовать редактировать...
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730691
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов ЮрийХП может изменить значения нескольких полей, как тогда быть?
Тогда, по вашей же логике, что с одними данными работают несколько человек, вы никогда не сможете встать в то же место. Потому что того места попросту может уже не существовать.
Ваша цель спозиционироваться на редактируемой записи после переоткрытия запроса и не важно в каком виде будет грид.
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730707
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл ЭраЛеонов Юрий...ХП может изменить значения нескольких полей, как тогда быть?
...
Перечитывай ОДНУ запись. Ту, которая изменялось. Одну - единственную.

КАКИМ ОБРАЗОМ??? В другом датасете одну запись открывать и потом подкидывать? Не понимаю...
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730711
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrЛеонов ЮрийХП может изменить значения нескольких полей, как тогда быть?
Тогда, по вашей же логике, что с одними данными работают несколько человек, вы никогда не сможете встать в то же место. Потому что того места попросту может уже не существовать.
Ваша цель спозиционироваться на редактируемой записи после переоткрытия запроса и не важно в каком виде будет грид.

Как раз важно. Цель такая: если изменение касалось не структуры данных, то позиционироваться нужно на то же самое место. Если набор изменился, тогда на эту же запись, пусть она стоит где угодно. А если в новом наборе нет этой записи, тогда идем на первую. По-моему, логично.
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730764
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов ЮрийФэйтл Эрапропущено...

Перечитывай ОДНУ запись. Ту, которая изменялось. Одну - единственную.

КАКИМ ОБРАЗОМ??? В другом датасете одну запись открывать и потом подкидывать? Не понимаю...
ХЗ, твои проблемы. Ты уперся в свой грид, про сервер и датасет не гу-гу.
...
В TIBDataSet, например, 5 sql предложений:

- select
- insert
- update
- delete
- refresh

Последнее (refresh) предложение - именно для перечитывания текущей записи:
Код: pascal
1.
 select a, b from tbl where id = :id


Вызывается автоматически, после любого изменения, и только для текущей строки.
И в TpFIBDataSet тоже такое есть.
...
Даже если твой датасет такого не умеет, можно запитать от инмемори датасета. А можно грид юзать в провайдер моде, и создать виртуальный источник данных.
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730785
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл ЭраЛеонов ЮрийКАКИМ ОБРАЗОМ??? В другом датасете одну запись открывать и потом подкидывать? Не понимаю...
ХЗ, твои проблемы. Ты уперся в свой грид, про сервер и датасет не гу-гу.

Сервер - Oracle 11.2.0.4.0
TOraQuery из палитры компонент ODAC
Сам запрос перебирается динамически, все бинд-переменные заменяются значениями (была необходимость)
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730794
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов ЮрийФэйтл Эрапропущено...

ХЗ, твои проблемы. Ты уперся в свой грид, про сервер и датасет не гу-гу.

Сервер - Oracle 11.2.0.4.0
TOraQuery из палитры компонент ODAC
Сам запрос перебирается динамически, все бинд-переменные заменяются значениями (была необходимость)
https://www.devart.com/odac/docs/devart.odac.toraquery.htm

В TOraQuery есть свойство RefreshSQL: https://www.devart.com/odac/docs/devart.dac.tcustomdadataset.sqlrefresh.htm

И метод RefreshRecord есть: https://www.devart.com/odac/docs/devart.dac.tcustomdadataset.refreshrecord().htm
Который может вызываться даже автоматически: https://www.devart.com/odac/docs/devart.dac.tcustomdadataset.refreshoptions.htm
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730805
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эра https://www.devart.com/odac/docs/devart.odac.toraquery.htm

В TOraQuery есть свойство RefreshSQL: https://www.devart.com/odac/docs/devart.dac.tcustomdadataset.sqlrefresh.htm

И метод RefreshRecord есть: https://www.devart.com/odac/docs/devart.dac.tcustomdadataset.refreshrecord().htm
Который может вызываться даже автоматически: https://www.devart.com/odac/docs/devart.dac.tcustomdadataset.refreshoptions.htm
Это работает когда меняется гарантированно одна строка в наборе
А если за время, прошедшее с выборки уже были изменения по другим записям, тогда что? Они же не обновятся автоматом по изменению в БД? Или я неправ?
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730814
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов ЮрийФэйтл Эра https://www.devart.com/odac/docs/devart.odac.toraquery.htm

В TOraQuery есть свойство RefreshSQL: https://www.devart.com/odac/docs/devart.dac.tcustomdadataset.sqlrefresh.htm

И метод RefreshRecord есть: https://www.devart.com/odac/docs/devart.dac.tcustomdadataset.refreshrecord().htm
Который может вызываться даже автоматически: https://www.devart.com/odac/docs/devart.dac.tcustomdadataset.refreshoptions.htm
Это работает когда меняется гарантированно одна строка в наборе
А если за время, прошедшее с выборки уже были изменения по другим записям, тогда что? Они же не обновятся автоматом по изменению в БД? Или я неправ?

Конечно, не изменятся. Именно так и работают с датасетами в гридах: перечитывают только ту запись, с которой идет работа. Именно для этого сделаны специальный члены класса датасета - RefeshRecord и RefreshSQL.

Сделай кнопку: ОБНОВИТЬ. Если юзеру невмоготу - он воспользуется.
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730819
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл ЭраКонечно, не изменятся. Именно так и работают с датасетами в гридах: перечитывают только ту запись, с которой идет работа. Именно для этого сделаны специальный члены класса датасета - RefeshRecord и RefreshSQL.
То есть если другой пользователь изменит данные я не узнаю об этом при перечитке только одной записи.
Это помогает в однопользовательской системе, мне такое не подходит
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730825
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов Юрий, да, порой приходится мутить свой датасет с инкрементальным рефрешем если готовых не найти под свои нужды
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730827
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов ЮрийФэйтл ЭраКонечно, не изменятся. Именно так и работают с датасетами в гридах: перечитывают только ту запись, с которой идет работа. Именно для этого сделаны специальный члены класса датасета - RefeshRecord и RefreshSQL.
То есть если другой пользователь изменит данные я не узнаю об этом при перечитке только одной записи.
Это помогает в однопользовательской системе, мне такое не подходит

Глупый какой. Мало тебе датасета, который 7 минут открывается?

Ладно, вот тебе кактус:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var
  fBM: Pointer;
  fTRI: Integer;
begin

 fBM :=   Датасет.GetBookmark;
 fTRI :=  ЦэИксГридВью.Controller.TopRecordIndex;

 Датасет.CloseOpen

 Датасет.GotoBookmark(fBM);
 ЦэИксГридВью.Controller.TopRecordIndex := fTRI;
 
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39730946
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже много лет как сервермоде сделан в гриде, который умеет гораздо больше чем гридмоде... И способен обрабатывать многопользовательские коллизии
...
Рейтинг: 0 / 0
Позиционирование при перечитывании запроса и GridMode
    #39731090
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что в прошлой теме, что в этой -- тестовое приложение надо делать, если на основном не получается повторить желаемого.

Вот минимальный код, который восстанавливает фокус и скрол (плюс скролит до записи, если она вне экрана оказалась) как в обычном режиме, так и в грид моде. Словно ничего и не обновлялось на экране у пользователя. Всякие проверки и ограничения автору уже самостоятельно надо написать:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
var
  nextVisible: Integer;
  nextFocused: Integer;
begin
  nextVisible := cxGrid1DBTableView1.Controller.TopRecordIndex;
  nextFocused := cxGrid1DBTableView1.Controller.FocusedRecordIndex;

  // server changes simulate
  dxMemData1.Edit;
  dxMemData1.FieldByName('a').AsString := TimeToStr(Now);
  dxMemData1.Post;
  dxMemData1.SaveToTextFile('test.txt');
  dxMemData1.LoadFromTextFile('test.txt');

  // restore focus and scroll
  cxGrid1DBTableView1.Controller.FocusedRecordIndex := nextFocused;
  cxGrid1DBTableView1.Controller.TopRowIndex := nextVisible;
  cxGrid1DBTableView1.Controller.MakeFocusedRecordVisible;
...
Рейтинг: 0 / 0
25 сообщений из 84, страница 2 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Позиционирование при перечитывании запроса и GridMode
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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