[Решено] Обновление только одной строки в DBGrid

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

[Решено] Обновление только одной строки в DBGrid

Сообщение Ism » 14.06.2012 19:17:25

Привет
Задача появилась, обновить только одну строку в DBGrid , но чтоб визуально позиция курсора не изменилась.
last_id:=DataSet.FieldByName('id')
DataSet.Close
DataSet.Open
DataSet.Locate('id',last_id,[]);

не подходит, так как делает найденную строку первой в DBGrid , даже если она была пятой до закрытия

Пробовал в датасете делать тип поля Lookup, чтоб изменения сразу отображались (при изменении id показывалось содержимое из подтаблицы), но не заработало
Последний раз редактировалось Ism 15.06.2012 21:11:37, всего редактировалось 1 раз.
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Обновление только одной строки в DBGrid

Сообщение alexs » 14.06.2012 19:28:00

Код: Выделить всё
DataSet.Refresh

Обычно все уважающие себя компоненты доступа к данным содержат данный метод.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Обновление только одной строки в DBGrid

Сообщение Ism » 14.06.2012 19:31:36

Здесь есть решение, но оно очень громоздко
http://www.sql.ru/forum/actualthread.aspx?tid=244793

Добавлено спустя 3 минуты 39 секунд:
DataSet.Refresh

Обновляет, но делает строку первой , визуально строка подскакивает в DBGrid
Работает , но неустойчиво

Есть ли способы правильно обновить данные только одной строки в DBGrid ?
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Обновление только одной строки в DBGrid

Сообщение iskander » 14.06.2012 20:19:53

А так вроде грид не дёргается?
Код: Выделить всё
var
  r: Integer;
begin
  with Dataset do
  begin
    r := RecNo;
    DisableControls;
    try
      Close;
      Open;
      RecNo := r;
    finally
      EnableControls;
    end;
  end;
iskander
энтузиаст
 
Сообщения: 624
Зарегистрирован: 08.01.2012 18:43:34

Re: Обновление только одной строки в DBGrid

Сообщение stikriz » 14.06.2012 21:21:17

Ism писал(а):Есть ли способы правильно обновить данные только одной строки в DBGrid ?

Вопрос некорректный. Корректный будет : "Как обновить только одну строку датасета."

Добавлено спустя 9 минут 5 секунд:
Ism писал(а):Обновляет, но делает строку первой , визуально строка подскакивает в DBGrid

У датасета не реализован RecNo?
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: Обновление только одной строки в DBGrid

Сообщение Ism » 14.06.2012 21:57:08

У датасета не реализован RecNo

это ZeosDbo , да , есть
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Обновление только одной строки в DBGrid

Сообщение alexs » 14.06.2012 21:57:49

Ism писал(а):Обновляет, но делает строку первой , визуально строка подскакивает в DBGrid

Какие компоненты доступа?
Если ZEOS - то попробуй ZQuery1.RefreshCurrentRow();
А вообще - такое поведение - это баг. Всё должно быть без перескоков.
Это самый правильный путь. Полное переоткрытие запроса - лишний трафик и черевато скрытыми багами...
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Обновление только одной строки в DBGrid

Сообщение Ism » 14.06.2012 22:13:09

RefreshCurrentRow не срабатывает
The refreshrow method is only supported with in update object
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Обновление только одной строки в DBGrid

Сообщение alexs » 14.06.2012 22:54:14

Ну естественно - подложи компоненту UpdateSQL и напиши в ней запрос на обновление одной строки. И всё станет замечательно.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Обновление только одной строки в DBGrid

Сообщение Ism » 14.06.2012 23:21:39

Да , действительно

ZUpdateSQL1.ModifySQL:='update new_table1 set id=:id, field_str=:field_str'

ZUpdateSQL1.RefreshSQL:='select id, field_str from new_table1 where id=:id'


Только нюанс, нужно делать

ZQuery1.RefreshCurrentRow(false);
DBGrid1.Refresh;
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Обновление только одной строки в DBGrid

Сообщение alexs » 14.06.2012 23:45:38

Ism писал(а):Только нюанс, нужно делать


Вторая строка излишняя...
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Обновление только одной строки в DBGrid

Сообщение Ism » 14.06.2012 23:54:06

Не совсем, без нее почемуто не отображалось полученное RefreshCurrentRow (после перескока на другую строку все появлялось) , наверное проблема в прорисовке в Lazarus DBGrid

Или zeos не вызывает перерисовку после получения строки
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 236

Рейтинг@Mail.ru
cron