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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2014, 22:31   #1
Muramidaza
Пользователь
 
Регистрация: 08.01.2014
Сообщений: 53
По умолчанию Программно установить курсор в DBGrid

В DBGrid есть столбец с уникальными значениями. Нужно найти строку по этому значению, выделить ее и переместить туда курсор.
Muramidaza вне форума Ответить с цитированием
Старый 25.02.2014, 22:47   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Запись искать в датасете. С помощью Locate например. Нужная колонка - SelectedIndex или SelectedField грида
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.02.2014, 22:49   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

и ?
eval вне форума Ответить с цитированием
Старый 25.02.2014, 23:36   #4
Muramidaza
Пользователь
 
Регистрация: 08.01.2014
Сообщений: 53
По умолчанию

Получилось пока так

Код:
      
CatalogForm.DBGrid1.DataSource.DataSet.First;
while (not CatalogForm.DbGrid1.DataSource.DataSet.Eof)  do
        begin
          if DBGrid2.DataSource.DataSet.Fields[1].AsInteger = CatalogForm.DbGrid1.DataSource.DataSet.Fields[0].AsInteger then break;
          CatalogForm.DBGrid1.DataSource.DataSet.Next;
        end;
Muramidaza вне форума Ответить с цитированием
Старый 26.02.2014, 00:55   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

не, это в печку
eval вне форума Ответить с цитированием
Старый 26.02.2014, 07:51   #6
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
не, это в печку
почему? на глаз, код рабочий, с задачей должен справляться
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 26.02.2014, 09:03   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
с задачей должен справляться
С перемещением он может и справится, но печаль может случиться если на событии перемещения (к примеру) сидит какой-то обработчик. Он то при каждой итерации вызываться будет.
метод Locate нужно использовать:
Код:
if not CatalogForm.DBGrid1.DataSource.DataSet.Locate('поле','Искомое значение',[]) then ShowMessage('Не нашло');
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.02.2014, 09:57   #8
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

обработчик будет срабатывать и в случае с locate, так что обработчик надо отключать
а в данном случае надо сравнивать значения двух полей, а локейтом такое не получится (или я чего то не знаю)
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 26.02.2014, 10:05   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Toxa Посмотреть сообщение
обработчик будет срабатывать и в случае с locate, так что обработчик надо отключать
а в данном случае надо сравнивать значения двух полей, а локейтом такое не получится (или я чего то не знаю)
во-первых, можно и несколько полей указать в LOCATE

во-вторых, где Вы тут:
Цитата:
Код:
if DBGrid2.DataSource.DataSet.Fields[1].AsInteger = CatalogForm.DbGrid1.DataSource.DataSet.Fields[0].AsInteger then break;
увидели сравнение ДВУХ полей?!!!
Одно поле проверяется!
в датасете, связанном с DBGrid1 ищется значение текущей записи из датасетя грида DBGrid2 (я бы вообще в переменную перед циклом забрал)


Цитата:
обработчик будет срабатывать и в случае с locate
что-то сомневаюсь... Вы проверяли или это так, предположения?

хотя, в принципе согласен, все обработчики и визуализацию я бы перед поиском отключил, потом - включил!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.02.2014, 10:08   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
обработчик будет срабатывать и в случае с locate, так что обработчик надо отключать
Будет, но только один раз. В коде выше - по каждой записи при сканировании.
Цитата:
а в данном случае надо сравнивать значения двух полей, а локейтом такое не получится
Ищется в одном датасете по значению поля текущей записи другого датасета - в чем проблема?
Цитата:
что-то сомневаюсь... Вы проверяли или это так, предположения?
Срабатывает, один раз если запись найдена и ни разу если не найдена. В Д4 помню ошибка была - после Locate не срабатывал даже если находил
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 26.02.2014 в 10:10.
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установить курсор Михаил Юрьевич БД в Delphi 3 25.02.2012 12:29
установить курсор в TextBox segail Microsoft Office Excel 4 12.09.2010 18:46
Установить курсор в DBGrid nusik Общие вопросы Delphi 5 06.05.2009 22:14
Программно создать курсор SeregaIRK Компоненты Delphi 1 19.09.2008 09:06
Программно установить курсор мыши в браузере IE, и кликнуть в окне браузера Vladimir K. Общие вопросы Delphi 13 19.01.2008 17:07