Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2009, 09:48   #1
Serval
Пользователь
 
Регистрация: 20.01.2009
Сообщений: 26
Вопрос Обновление данных в DBGrid и фокус строки.

После внесения изменения в БД нужно обновить их в DBGrid, но при обновлении через
Код:
Form2.Query3.Active:=false;
Form2.Query3.Active:=true;
возникает проблема что данные отображаются с первой строки в компоненте, фокус строки пропадает и соответственно чтобы убедиться что в нужной строке есть изменения или внести в следующую приходиться снова искать.

Возможно ли сделать чтобы он только обновил данные в выделенной строке или как вернутся к той строке снова.
Serval вне форума Ответить с цитированием
Старый 05.06.2009, 10:06   #2
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Если я правильно понял вопрос, то так
Код:
var a:integer;

begin
a:=ADOQuery.RecNo;
  ADOQuery.Active:=False;
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.Add('SELECT * FROM Tablica');
  ADOQuery.Active:=True;
  ADOQuery.RecNo:=a;
end;
S@fer вне форума Ответить с цитированием
Старый 05.06.2009, 10:49   #3
Serval
Пользователь
 
Регистрация: 20.01.2009
Сообщений: 26
По умолчанию

ммм забыл уточнить сделано на BDE
Также сделал на ИВУ - неработет...

Последний раз редактировалось Serval; 05.06.2009 в 10:55.
Serval вне форума Ответить с цитированием
Старый 05.06.2009, 11:08   #4
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Цитата:
ммм забыл уточнить сделано на BDE
разницы нет!
Код:
a:=Query.RecNo;
  Query.Active:=False;
  Query.SQL.Clear;
  Query.SQL.Add('SELECT * FROM Tablica');
  Query.Active:=True;
  Query.RecNo:=a;
S@fer вне форума Ответить с цитированием
Старый 05.06.2009, 11:24   #5
Serval
Пользователь
 
Регистрация: 20.01.2009
Сообщений: 26
По умолчанию

ну я и делал - неполучилось.


Код:
  a:=form2.Query3.RecNo;
showmessage(inttostr(form2.Query3.RecNo));
  Form2.Query3.Active:=false;
  Form2.Query3.Active:=true;
  Form2.Query3.RecNo:=a;
showmessage(inttostr(form2.Query3.RecNo));
значения получаются -1
Serval вне форума Ответить с цитированием
Старый 05.06.2009, 11:28   #6
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Ну значит перед обновлением курсор стоит на первой строке.
Query3.RecNo - это номер строки на которой находиться курсор.
Если запись добавляется в конец таблицы, то можно использовать.
Код:
 Form2.Query3.Active:=false;
  Form2.Query3.Active:=true;
  Form2.Query3.Last;
S@fer вне форума Ответить с цитированием
Старый 05.06.2009, 11:31   #7
Serval
Пользователь
 
Регистрация: 20.01.2009
Сообщений: 26
По умолчанию

Записи не добавляются а изменяются в них данные - выделяется строка в DBGrid, даблклик (или нажатие кнопки), выводится форма, заполняется, жмется кнопка - происходить изменение в базе и форма закрывается - а курсор всеравно встает на 1 строку вместо той что была.
Last - работает, а то что раньше советовал нет


Код:
  Query1.Active := false;
  Query1.SQL.clear;
  Query1.SQL.add('update place set city='''+ComboBox1.Text+''', objectname='''+ComboBox2.Text+''', addres='''+ComboBox3.Text+''', grupid='''+ComboBox4.Text+''', devicetype='''+ComboBox5.Text+''', deviceid='''+ComboBox6.Text+''', conn_place='''+ComboBox7.Text+''', objecttype='''+ComboBox8.Text+'''' );
  Query1.SQL.add('where deviceid='''+Edit6.Text+'''');
  Query1.ExecSQL;

  Form2.Query3.Active:=false;
  Form2.Query3.Active:=true;
  form2.Query3.Last;
собственно код в кнопке сохранения

Последний раз редактировалось Serval; 05.06.2009 в 11:34.
Serval вне форума Ответить с цитированием
Старый 05.06.2009, 11:35   #8
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

тогда
Код:
a:=form2.Query3.RecNo;
нужно делать при
Цитата:
выделяется строка в DBGrid, даблклик (или нажатие кнопки)
Еще вопрос DBGrid отображает то, что находиться в Query3 ? А запрос в Query3 меняется?
S@fer вне форума Ответить с цитированием
Старый 05.06.2009, 11:46   #9
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

вот чего человеку голову морочить?

Serval, пользуйся бумарками или локейтом по праймари в таблице
вариант с букмарками так
Код:
var
  MyBookMark: TBookmark;
begin
   MyBookMark:= Form2.Query3.GetBookmark;
   ....
    Query1.Active := false;
  Query1.SQL.clear;
  Query1.SQL.add('update place set ....');
  Query1.ExecSQL;
   ....   
   Form2.Query3.DisableControls;
   Form2.Query3.Active:=false;
   Form2.Query3.Active:=true;
   Form2.Query3.GotoBookmark(MyBookMark);
   Form2.Query3.EnableControls;
   Form2.Query3.FreeBookMark(MyBookMark);
end;
вариант с праймари так (допустим в праймари одно поле, с двумя потом сам разберешься как доделать код)
Код:
var
    l_pk_value: integer;

begin
   l_pk_value::= Form2.Query3.FieldByName('your_pk_field_name').AsInteger;
   ....
    Query1.Active := false;
  Query1.SQL.clear;
  Query1.SQL.add('update place set ....');
  Query1.ExecSQL;
   ....   
   Form2.Query3.DisableControls;
   Form2.Query3.Active:=false;
   Form2.Query3.Active:=true;
   Form2.Query3.Locate('your_pk_field_name', l_pk_value, []);
   Form2.Query3.EnableControls;
end;
soleil@mmc вне форума Ответить с цитированием
Старый 05.06.2009, 11:47   #10
Serval
Пользователь
 
Регистрация: 20.01.2009
Сообщений: 26
По умолчанию

Цитата:
Сообщение от S@fer Посмотреть сообщение
Еще вопрос DBGrid отображает то, что находиться в Query3 ? А запрос в Query3 меняется?
нет неменяется - вот чую в этом и проблема.
если сделать
Код:
  form2.Query3.First;
  form2.Query3.MoveBy(10);
то встает на 11 строку как и положено (без first "показывает фигу и нагло лыбится")
впринципе если узнать номер строки поторую выделил в дбгрид то проблема решена будет
Serval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фокус на заданной строке в DBGrid Zver БД в Delphi 6 08.11.2014 12:51
Обновление списка данных без потери данных в переменных VaBank БД в Delphi 13 03.06.2009 10:47
перенос данных из DBGrid в DBGrid KingSize БД в Delphi 17 24.04.2009 09:30
Обновление DBGrid + ADOQuery Demonk БД в Delphi 11 04.02.2009 13:42
обновление данных AnGrig БД в Delphi 3 14.10.2007 13:08