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

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

05.07.2015, 17:21. Показов 7840. Ответов 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
пофигист широкого профиля
4770 / 3205 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
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
пофигист широкого профиля
4770 / 3205 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
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
пофигист широкого профиля
4770 / 3205 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
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
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,672
Записей в блоге: 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
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,672
Записей в блоге: 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
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,672
Записей в блоге: 21
05.07.2015, 23:45
пока не надо - не надо разбираться
как надо будет, надо будет разбираться
1
пофигист широкого профиля
4770 / 3205 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
06.07.2015, 01:00
Цитата Сообщение от krapotkin Посмотреть сообщение
там должен быть метод Refresh для обновления одной записи
Первый раз слышу про метод позволяющий обновить одну запись в наборе данных. Даже в Парадоксе этого сделать не сумели. Хотя и пытались.

Добавлено через 4 минуты
Цитата Сообщение от danek130995 Посмотреть сообщение
northener, видите ли, в чем дело.
Вижу. Вот почему большинство разработчиков по нажатии кнопки "Изменить" показывает форму для редактирования записи. И именно в ней сидят все эти эдиты. И она вызывается как модальная с кнопками "Применить" и "Отмена".
1
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,672
Записей в блоге: 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
пофигист широкого профиля
4770 / 3205 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
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
5984 / 4559 / 1095
Регистрация: 29.08.2013
Сообщений: 28,197
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru