|
|
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
Имеется грид, к которому привязан TFDQuery со сложным запросом, который собирает данные из нескольких таблиц через LEFT JOIN в том числе. Для того чтобы было проще описать проблему пусть будет запрос вида: Код: pascal 1. И есть следующая проблема: когда обновляются данные, то, при наличии нескольких записей с одинаковым AID, текущая запись в гриде (которую он берёт из TFDQuery, как я понимаю) перескакивает на первую по порядку запись с тем-же AID, что был до вызова Refresh(). Пытался это победить получая Bookmark в BeforeRefresh() и восстанавливая его в AfterRefresh() - помогло, но теперь грид позиционирует эту запись в центре, т.е. курсор всё равно визуально "прыгает" после обновления, разве что запись теперь не меняется. Ещё это нормально работает, если запрос засунуть во вьюху, но хотелось бы всё-таки его иметь на клиенте. Можно это как-нибудь заставить работать нормально, т.е. чтобы при обновлении данных выбранной оставалась та же запись что и была и курсор не менял позицию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2020, 16:02 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
Запихнуть данные в МемориТайбл. Отсылать запрос на обновление в базу и в случае положительного ответа изменять значение в МемориТайбл. То есть не перечитывать весь датасет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2020, 16:30 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
DimaBr Запихнуть данные в МемориТайбл. Отсылать запрос на обновление в базу и в случае положительного ответа изменять значение в МемориТайбл. То есть не перечитывать весь датасет А как узнать изменившиеся записи, если не перечитывать датасет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2020, 18:51 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
alekcvpМожно это как-нибудь заставить работать нормально, т.е. чтобы при обновлении данных выбранной оставалась та же запись что и была и курсор не менял позицию? Да. Убрать обновление данных. Или убрать TDBGrid и обновлять данные аккуратно ручками так как надо. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2020, 18:57 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Да. Убрать обновление данных. Или убрать TDBGrid и обновлять данные аккуратно ручками так как надо. Т.е. это не баг, а фича? Почему на простых запросах он позицию запоминает, а на сложных - нет?.. Хотя букмарки прекрасно работают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2020, 19:26 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
alekcvpПочему на простых запросах он позицию запоминает, а на сложных - нет?.. Посмотреть ему в исподники - совсем mission impossible? (Хотя и по симптомам легко догадаться, что внутри идёт locate по полю, считающемуся ключом.) alekcvpХотя букмарки прекрасно работают. Да, на первый взгляд может показаться, что они работают, но на самом деле это баг. Букмарки не переживают закрытие датасета, так что позиционирование после переоткрытия идёт, фактически, по мусору. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2020, 20:05 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Посмотреть ему в исподники - совсем mission impossible? (Хотя и по симптомам легко догадаться, что внутри идёт locate по полю, считающемуся ключом.) Ага, а ключём он почему-то считает не уникальное поле :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2020, 20:25 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
alekcvpа ключём он почему-то считает не уникальное поле :( Наверное потому, что уникального-то и нет?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2020, 21:09 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov alekcvpа ключём он почему-то считает не уникальное поле :( Наверное потому, что уникального-то и нет?.. Ну он его вообще выбирает по каким-то флагам, получаемым с сервера, как я понял. Там в исходниках сложно копаться, потому что всё через интерфейсы, реализацию хрен найдёшь. Была бы возможность задавать вручную... но я её не нашёл, точнее что-то нашёл, но оно доступно только при каких-то странных условиях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2020, 23:02 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
Можно это как-нибудь заставить работать нормально, т.е. чтобы при обновлении данных выбранной оставалась та же запись что и была и курсор не менял позицию? И каков критерий этой той же ? Все нормально. Ничего не надо переделывать. К чему эта ненужная эстетика ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2020, 10:49 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
L_argo Можно это как-нибудь заставить работать нормально, т.е. чтобы при обновлении данных выбранной оставалась та же запись что и была и курсор не менял позицию? Все нормально. Ничего не надо переделывать. К чему эта ненужная эстетика ? Что нормально? Что пользователь нажимает F5, а потом вынужден снова искать нужную запись? Критерий "той же" либо тот, что используется в закладках, либо по выбранными мной ключевым полям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2020, 11:18 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
alekcvp Ага, а ключём он почему-то считает не уникальное поле :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2020, 15:42 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ alekcvp Ага, а ключём он почему-то считает не уникальное поле :( А смысл, если запрос тот же самый? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2020, 16:11 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
Запрос совсем не тут же самый, но в данном случае это иррелевантно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2020, 16:31 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
alekcvp А смысл, если запрос тот же самый? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2020, 16:51 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
Критерий "той же" либо тот, что используется в закладках, либо по выбранными мной ключевым полям. Букмарки действительны только в текущей выборке. Обновление это уже ДРУГАЯ ВЫБОРКА и совершенно другой результат (н-р сортировка поменяла порядок строк). Поэтому единственный критерий - уникальный ключ записи. Запомните его и станьте на него после обновления. Для обновления текущей записи есть специальный механизм (и в АДО и в ФайрДАКе). Но он все равно потребует этот же ключ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2020, 09:31 |
|
||
|
TFDQuery.Refresh()
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ alekcvp А смысл, если запрос тот же самый? Естественно весь. L_argo Поэтому единственный критерий - уникальный ключ записи. Запомните его и станьте на него после обновления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2020, 10:32 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39968906&tid=2038220]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
140ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 284ms |
| total: | 531ms |

| 0 / 0 |
