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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2009, 22:32   #1
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
Счастье Перемщение выделенной стоки в DBGrid

Люди подскажите, как мне сделать так, чтобы при обновлении таблицы с помощью SELECT, слева стрелка (указатель) которая показывает выбранную строку, оставалась на том же месте, какую я запись обновил, а не преходила все время к первой записи в DBGrid.
1 старый программист, лучше новых 2-х
Droid вне форума Ответить с цитированием
Старый 10.07.2009, 22:59   #2
bush007
Форумчанин
 
Аватар для bush007
 
Регистрация: 10.02.2009
Сообщений: 226
По умолчанию

ключевой вопрос для форумчан. а что ты делаешь с помощью селект?? хоть наводку дай для спецов
следи за собой. Будь осторожен.
Не забывай свой первый "hello world".
bush007 вне форума Ответить с цитированием
Старый 10.07.2009, 23:04   #3
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Код:
Var
   lBookmark: TBookmark;
begin
   ADOTable.DisableControls;
   lBookmark:=ADOTable.GetBookmark;
   ADOTable.Close;
   ADOTable.Open;
   If lBookmark <> Nil Then
      ADOTable.GotoBookmark(lBookmark);
   ADOTable.EnableControls;
end;
soleil@mmc вне форума Ответить с цитированием
Старый 10.07.2009, 23:06   #4
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
По умолчанию

Цитата:
Сообщение от bush007 Посмотреть сообщение
ключевой вопрос для форумчан. а что ты делаешь с помощью селект?? хоть наводку дай для спецов
Короче есть у меня DBlookupCombobox при выборе значения из него в id -шник главной таблицы добавляется запись, она добавляется но не обновляется сразу при добавлении, поэтому использую SELECT и при обновлении он мне премещает строку на 1 запись, Так понятно ? Именно в DBGrid а не где то еще
1 старый программист, лучше новых 2-х

Последний раз редактировалось Droid; 10.07.2009 в 23:08.
Droid вне форума Ответить с цитированием
Старый 10.07.2009, 23:07   #5
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
Код:
Var
   lBookmark: TBookmark;
begin
   ADOTable.DisableControls;
   lBookmark:=ADOTable.GetBookmark;
   ADOTable.Close;
   ADOTable.Open;
   If lBookmark <> Nil Then
      ADOTable.GotoBookmark(lBookmark);
   ADOTable.EnableControls;
end;
У меня ADOQuery
1 старый программист, лучше новых 2-х
Droid вне форума Ответить с цитированием
Старый 11.07.2009, 08:20   #6
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 вне форума Ответить с цитированием
Старый 11.07.2009, 11:31   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) в случае ADOQuery тоже можно использовать закладки (BookMark), как это предложил soleil@mmc в пост#3

и способ от soleil@mmc и способ от S@fer бесусловно рабочие, но имеют один большой недостаток - они сохраняют текущую запись по НОМЕРУ,
чаще всего этого будет достаточно,
но абсолютно не факт, что в результате SELECT порядок (и количество записей не изменится).
Например, у нас в рабочем проекте через различные условия выполняют запросы с различными условиями, запрос возращает разные наборы данных. В этом случае может помочь такой способ (обязательно наличие в выборке ключевого поля, в данном примере BALANCES_ID):
Код:
  Screen.Cursor := crHourGlass;
  if AdoQuery1.Active then
    if not AdoQuery1.isEmpty
       then 
         _id := AdoQuery1.FieldByName('BALANCES_ID').AsFloat;
  AdoQuery1.Close;

  {тут задание запроса/параметров  и т.д. и т.п.}
  AdoQuery1.Params.ParamByName('pBG_ID').asFloat := dBGr_id;
  AdoQuery1.Open;
  if not AdoQuery1.isEmpty 
      then AdoQuery1.Locate('BALANCES_ID',_id,[]);
  Screen.Cursor := crDefault;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.07.2009, 12:36   #8
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) в случае ADOQuery тоже можно использовать закладки (BookMark), как это предложил soleil@mmc в пост#3

и способ от soleil@mmc и способ от S@fer бесусловно рабочие, но имеют один большой недостаток - они сохраняют текущую запись по НОМЕРУ,
чаще всего этого будет достаточно,
но абсолютно не факт, что в результате SELECT порядок (и количество записей не изменится).
Например, у нас в рабочем проекте через различные условия выполняют запросы с различными условиями, запрос возращает разные наборы данных. В этом случае может помочь такой способ (обязательно наличие в выборке ключевого поля, в данном примере BALANCES_ID):
Код:
  Screen.Cursor := crHourGlass;
  if AdoQuery1.Active then
    if not AdoQuery1.isEmpty
       then 
         _id := AdoQuery1.FieldByName('BALANCES_ID').AsFloat;
  AdoQuery1.Close;

  {тут задание запроса/параметров  и т.д. и т.п.}
  AdoQuery1.Params.ParamByName('pBG_ID').asFloat := dBGr_id;
  AdoQuery1.Open;
  if not AdoQuery1.isEmpty 
      then AdoQuery1.Locate('BALANCES_ID',_id,[]);
  Screen.Cursor := crDefault;
Попробовал твою ниче не получилось, а этот работает
вроде ничего лишнего не сохраняет.
Код:
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;
1 старый программист, лучше новых 2-х

Последний раз редактировалось Droid; 11.07.2009 в 12:56.
Droid вне форума Ответить с цитированием
Старый 11.07.2009, 13:11   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Попробовал твою ниче не получилось, а этот работает
вроде ничего лишнего не сохраняет.
Ну и отлично. Значит, Вы решили свою задачу.
А раз не заработал мой код — значит Вам этого и не нужно. sapienti sat.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление выделенной строки из DBGrid Sinker БД в Delphi 9 20.05.2011 03:09
Как вывести значение полей из выделенной записи в DBGrid ? DS75 БД в Delphi 5 30.04.2009 13:40
Проблема с выделенной памятью Ivan_32 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 27.02.2009 02:14
Проверьте задачу на стоки! Dremgor Помощь студентам 1 29.12.2008 21:45
доступ к элементам выделенной строки в DBGrid yulia БД в Delphi 2 12.12.2007 12:51