Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.03 c
1-1098871447
Alexious
2004-10-27 14:04
2004.11.14
Chart


14-1099036914
Baks
2004-10-29 12:01
2004.11.14
Мастера подскажите, помогите чайнику...


14-1098720801
Mirror
2004-10-25 20:13
2004.11.14
Почему у нас такие люди?


1-1099211898
Maxim____
2004-10-31 11:38
2004.11.14
Объекты в потоке


14-1098989890
Alein
2004-10-28 22:58
2004.11.14
Интеграция драйверов в дистрибутив Windы