Текущий архив: 2004.11.14;
Скачать: CL | DM;
ВнизSQL и Requery Найти похожие ветки
← →
kirilllius (2004-10-09 22:38) [0]Мастера, посоветуйте как быть.
Я выполняю запрос на обновление UPDATE … SET …. и .т.д.
Обновление выполняется, но обновление сразу не видно, приходится использовать Requery. Но эта штука переоткрывает таблицу. Все изменения становятся видны, но при этом текущая запись становится первой, а не та, которая была до изменений. Это понятно, т.к. таблица закрылась и открылась. Приходится использовать закладки. Получается куча наворотов. А вот как можно сделать очень просто, чтобы после запроса на обновление произведенные изменения сразу стали доступны и видны. (функция Refresh не помогает.)
Заранее благодарю.
← →
X-jedy (2004-10-10 02:46) [1]а можно кусок кода, который делает UPDATE … SET …. ?
Мало как-то инфы. Как вариант commit не делается/делается не там.
← →
Ольга (2004-10-10 10:39) [2]Не нравятся закладки, делайте так:
num:=Query.Recno; // запоминаем номер записи
UPDATE ... // выполняем обновление
Query.Requery([]); // обновляем набор данных
Query.MoveBy(num-1); // переходим на нужную запись
Проще не получится, да и некуда.
← →
Deniz © (2004-10-10 14:06) [3]> Ольга (10.10.04 10:39) [2]
Номер записи так же как и кол-во записей может измениться(были добавлены/удалены/изменены записи другим пользователем) после переоткрытия, сл-но текущей может стать другая запись.
Надо запоминать ПК и по нему делать locate.
← →
kirilllius (2004-10-11 20:15) [4]Всем спасибо!
← →
АлексейК (2004-10-12 05:49) [5]Можно обновлять только текущую запись и не перечитывать весь набор данных.
DS:TAdoDataSet;
begin
id_vbnk:=
DS.Properties["Unique Table"].Value:="MyTable";
DS.Properties["Resync Command"].Value := "select * from MyTable where ID_table = "+DS.FieldByname("id_table").AsString;
DS.Properties["Update Resync"].Value := adResyncAll;
DS.UpdateCursorPos;
DS.Recordset.Resync(adAffectCurrent,adResyncAllValues);
DS.Resync([rmExact]);
end;
← →
АлексейК (2004-10-12 05:50) [6]Строку
id_vbnk:=
прошу не читать.
← →
kirilllius (2004-10-14 11:12) [7]>АлексейК
Спасибо, попробуем так!
← →
malamba (2004-10-14 11:49) [8]>> Можно обновлять только текущую запись и не перечитывать весь набор данных
А если набор был изменен другим пользователем?
Мне кажется, Оля права:
запоминать значение поля
выполнить запрос
обновить датасет
и
Dataset.Locate
← →
Val © (2004-10-14 12:09) [9]>malamba (14.10.04 11:49)
> Мне кажется, Оля права:
[3] Deniz © (10.10.04 14:06)
← →
АлексейК (2004-10-14 12:38) [10]А если набор был изменен другим пользователем?
Мне кажется, Оля права:
запоминать значение поля
выполнить запрос
обновить датасет
и
Dataset.Locate
Да, такое возможно, но ничего страшного в этом нет. Можно найти несколько вариантов решения для этого случая, но уже привязываясь к конкретной задаче. Переоткрывать набор данных полностью и искать запись Locate очень дорогое решение, с точки зрения затрат производительности. И окончательное решение все же придется выбрать по совокупности требований текущей задачи.
Страницы: 1 вся ветка
Текущий архив: 2004.11.14;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.038 c