![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL и Requery [D6, MSSQL]
kirilllius © (2004-10-09 22:38:00)Мастера, посоветуйте как быть.
Я выполняю запрос на обновление UPDATE … SET …. и .т.д.
Обновление выполняется, но обновление сразу не видно, приходится использовать Requery. Но эта штука переоткрывает таблицу. Все изменения становятся видны, но при этом текущая запись становится первой, а не та, которая была до изменений. Это понятно, т.к. таблица закрылась и открылась. Приходится использовать закладки. Получается куча наворотов. А вот как можно сделать очень просто, чтобы после запроса на обновление произведенные изменения сразу стали доступны и видны. (функция Refresh не помогает.)
Заранее благодарю.
АлексейК (2004-10-14 12:38:00) [1]А если набор был изменен другим пользователем?
Мне кажется, Оля права:
запоминать значение поля
выполнить запрос
обновить датасет
и
Dataset.Locate
Да, такое возможно, но ничего страшного в этом нет. Можно найти несколько вариантов решения для этого случая, но уже привязываясь к конкретной задаче. Переоткрывать набор данных полностью и искать запись Locate очень дорогое решение, с точки зрения затрат производительности. И окончательное решение все же придется выбрать по совокупности требований текущей задачи.
Val (2004-10-14 12:09:00) [2]>malamba (14.10.04 11:49)
> Мне кажется, Оля права:
[3] Deniz © (10.10.04 14:06)
malamba (2004-10-14 11:49:00) [3]>> Можно обновлять только текущую запись и не перечитывать весь набор данных
А если набор был изменен другим пользователем?
Мне кажется, Оля права:
запоминать значение поля
выполнить запрос
обновить датасет
и
Dataset.Locate
kirilllius (2004-10-14 11:12:00) [4]>АлексейК
Спасибо, попробуем так!
АлексейК (2004-10-12 05:50:00) [5]Строку
id_vbnk:=
прошу не читать.
АлексейК (2004-10-12 05:49:00) [6]Можно обновлять только текущую запись и не перечитывать весь набор данных.
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;
kirilllius (2004-10-11 20:15:00) [7]Всем спасибо!
Deniz (2004-10-10 14:06:00) [8]> Ольга (10.10.04 10:39) [2]
Номер записи так же как и кол-во записей может измениться(были добавлены/удалены/изменены записи другим пользователем) после переоткрытия, сл-но текущей может стать другая запись.
Надо запоминать ПК и по нему делать locate.
Ольга (2004-10-10 10:39:00) [9]Не нравятся закладки, делайте так:
num:=Query.Recno; // запоминаем номер записи
UPDATE ... // выполняем обновление
Query.Requery([]); // обновляем набор данных
Query.MoveBy(num-1); // переходим на нужную запись
Проще не получится, да и некуда.
X-jedy (2004-10-10 02:46:00) [10]а можно кусок кода, который делает UPDATE … SET …. ?
Мало как-то инфы. Как вариант commit не делается/делается не там.