Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 не делается/делается не там.


Наверх

Титульная страница Поиск, карта сайта Написать письмо