С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
 Аватар для danek130995
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137

Как получить id выделенной записи в DBGrid?

05.07.2015, 17:21. Показов 7508. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Перепробовал всё! Почему вот это не работает?
Delphi
1
showmessage(inttostr(dbgrid1.Columns.Items.Index));
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.07.2015, 17:21
Ответы с готовыми решениями:

Как вывести отчет по выделенной записи в DBGrid?
Доброго утра всем. Делаю программу для диплома, и возник вопрос - как можно реализовать такое, чтобы при двойном нажатии на строку в...

Как вывести отчет по выделенной записи в DBGrid?
Добрый день! Делаю программу и возник такой вопрос - как реализовать, что бы при нажатии на строчку в DBGrid выводился отчет FastReport...

Как получить номер записи выбранной в DBGrid
adods5->Active=false; adods5->CommandText="Select * From Employees Where EName Like \042%" + edLookName->Text + "%\042"; ...

22
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
05.07.2015, 17:45
Что ты понимаешь под "id выделенной записи"?
1
 Аватар для danek130995
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
05.07.2015, 18:00  [ТС]
northener, аналог-itemindex в ListBox
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
05.07.2015, 19:17
Цитата Сообщение от danek130995 Посмотреть сообщение
аналог-itemindex в ListBox
В DBGrid нет ничего. Так что такого аналога нет и быть не может.
1
 Аватар для danek130995
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
05.07.2015, 19:18  [ТС]
northener, неужели нельзя узнать index выбранной записи? Для чего же тогда этот dbgrid1.Columns.Items.Index?
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
05.07.2015, 19:25
Цитата Сообщение от danek130995 Посмотреть сообщение
Для чего же тогда этот dbgrid1.Columns.Items.Index?
Это порядковый номер колонки в DBGrid.
Цитата Сообщение от danek130995 Посмотреть сообщение
еужели нельзя узнать index выбранной записи?
Нельзя. Потому что нет такого.
Зачем это тебе нужно?
1
 Аватар для danek130995
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
05.07.2015, 22:19  [ТС]
northener, видите ли, в чем дело.. При клике на какую-либо строчку содержимое всех полей отображается в Edit'ах для удобного изменения. Когда я делаю какое-либо действие, например, изменение, а потом хочу увидеть результат, я делаю запрос SQL.Text:='select * from pupil'; Open; и у меня сразу обновляется DBGrid. Но строчка, которая была выделена для изменения, уже не выделена, а выделена оказывается первая строчка. А пользователь по невнимательности может продолжить изменять старую строчку, потом нажмет кнопку изменить, а изменения сделаются в первой строчке(а в Edit'ах так и останется старая инфа, так как не было клика на строчку). Надеюсь понятно объяснил, вот скриншоты:
После нажатия кнопки "вывести все":


Так вот я хочу запомнить номер выделенной строки до нажатия на кнопку, а затем после выполнения процедуры выделить программно заново эту строку.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
05.07.2015, 23:15
как всегда
не надо помогать делать то что не надо делать
если требуется не просто выводить данные в DBGrid но еще и редактировать их, смотрите на ADODataset (подозреваю, что речь, как всегда, про ADO) там должен быть метод Refresh для обновления одной записи. Но все в ADO работает странно, может и Refresh быть не торт.
тогда универсальный метод: перед Close/Open нужно запомнить, на какой записи вы стоите (надеюсь, вы в курсе, что такое ключевые поля), и после Open сделать Locate на неё

P.S.1
плохая практика тянуть все поля таблицы через select *
указывайте конкретный список
P.S.2
Значение SQL.Text никуда не девается, не надо каждый раз его заполнять, если запрос не изменялся. Просто Open.
P.S.3
Для редактирования полей обычно применяется DBEdit а не Edit, если уж вас не устраивает редактирование прямо в гриде
1
 Аватар для danek130995
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
05.07.2015, 23:19  [ТС]
krapotkin, программу пишу не для настоящего предприятия, поэтому о таких вещах не хотелось задумываться, просто интересно стало про Index.
P.S. а как потом применять изменения, если редактировать в гриде сразу?
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
05.07.2015, 23:25
грид работает с датасетом
в датасете прописываются все 4 вида SQL запросов
select update delete insert
а еще отдельно Refresh - select для обновления только одной записи
кроме написания запросов, больше от программиста ничего не требуется
1
 Аватар для danek130995
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
05.07.2015, 23:26  [ТС]
krapotkin,
А что в Locate передавать кроме ключевого поля? Зачем вторые два параметра?

Не хотелось пока просто разбираться с DataSet'ом
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
05.07.2015, 23:45
пока не надо - не надо разбираться
как надо будет, надо будет разбираться
1
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
06.07.2015, 01:00
Цитата Сообщение от krapotkin Посмотреть сообщение
там должен быть метод Refresh для обновления одной записи
Первый раз слышу про метод позволяющий обновить одну запись в наборе данных. Даже в Парадоксе этого сделать не сумели. Хотя и пытались.

Добавлено через 4 минуты
Цитата Сообщение от danek130995 Посмотреть сообщение
northener, видите ли, в чем дело.
Вижу. Вот почему большинство разработчиков по нажатии кнопки "Изменить" показывает форму для редактирования записи. И именно в ней сидят все эти эдиты. И она вызывается как модальная с кнопками "Применить" и "Отмена".
1
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
06.07.2015, 10:40
northener,
в TDataset есть метод Refresh - там задается именно SQL обновления одной записи
наследники TDataset должны реализовывать его самостоятельно
IBX FIB отлично с этим справляются
про ADO - не знаю, но на уровне DBGrid получается поддержка Refresh "из коробки"
в качестве SQL там обычно тот же Select с добавлением чего-то типа
SQL
1
AND (id=:id)
1
 Аватар для danek130995
33 / 33 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
06.07.2015, 10:52  [ТС]
northener, хорошая идея
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
07.07.2015, 02:53
Цитата Сообщение от danek130995 Посмотреть сообщение
northener, хорошая идея
Но не моя. Эту идею придумали задолго до того как я о ней узнал.
Цитата Сообщение от krapotkin Посмотреть сообщение
northener,
в TDataset есть метод Refresh - там задается именно SQL обновления одной записи
Да. Заглянул в исходники TDataset. Так оно и есть. Точнее так оно задумано. И даже вроде как в родных для Борланда компонентах реализовано.
1
Эксперт Pascal/Delphi
 Аватар для mmm_corp
103 / 91 / 32
Регистрация: 30.05.2015
Сообщений: 594
08.07.2015, 12:40
dataset.fieldbyname('id').asInteger
0
1 / 1 / 0
Регистрация: 13.03.2016
Сообщений: 5
20.04.2018, 10:02
Да простит бог за ниже изложенное:

Delphi
1
2
3
4
5
6
7
8
9
10
11
begin
    Form1.Tquery1.DisableControls;
 
             Form1.Tquery1.First;
            while not Form1.Tquery1.Eof do
            if Form1.Tquery1.FieldByName('id').AsString=id.Text then
            break
 
 else Form1.Tquery1.Next;
 end;
   Form1.Tquery1.EnableControls;

Ищет в DBGride позицию из Едита (id.Text) и останавливается. Другого решения нет, ибо как и писали выше Грид - это просто сетка.
0
5953 / 4529 / 1094
Регистрация: 29.08.2013
Сообщений: 28,121
Записей в блоге: 3
20.04.2018, 10:15
Цитата Сообщение от mephistopheies Посмотреть сообщение
Другого решения нет, ибо как и писали выше Грид - это просто сетка.
то есть SQL запрос не предлагать, фильтр тоже

а именно ваше решение это то что надо?

Не по теме:

да еще и "осчастливить" тему 2015 года

0
1 / 1 / 0
Регистрация: 13.03.2016
Сообщений: 5
20.04.2018, 10:29
Человеку надо было выделить редактируемый элемент после обновления грида. При чем тут SQL запрос и фильтр?
Когда я делаю какое-либо действие, например, изменение, а потом хочу увидеть результат, я делаю запрос SQL.Text:='select * from pupil'; Open; и у меня сразу обновляется DBGrid. Но строчка, которая была выделена для изменения, уже не выделена, а выделена оказывается первая строчка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.04.2018, 10:29
Помогаю со студенческими работами здесь

Как оставлять фокус на выделенной ячейке DBGrid
Ещё раз здравствуйте. Такая проблема: Мне нужно, что бы DBGrid оставлял выделенной ячейку он (т.е. DBGrid) теряет фокус. Приложу...

Как изменить положение выделенной строки в DBGrid
Добрый день, если можно помогите разобраться со своими ошибками. Задача: Options.gdRowSelect = True Необходимо перемещаться в...

Как записать значения выделенной строчки DBGrid в Edit
У меня есть DBGrid в котором 5 полей и 5 Edit. Мне нужно в событии DBGrid1CellClick сделать так, что-бы в эдиты выводились значения всех...

Добавление записи в DBGrid и получение записи в DBGrid Другой формы
К проекту подключена Access .mdb БД. Имеется 2 формы. На обоих формах есть DBGrid. Как сделать, что бы при добавлении записи в таблицу из...

Как получить имя столбца выделенной ячейки?
Привет всем!!! Подскажите как мне получить имя столбца выделенной ячейки? Допустим у меня выделена ячейка В2, мне нужно получить имя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru