Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Получение номера ключевого поля


Автор: igorz89 5.5.2009, 15:11
Допустим,  у нас на форме отображена таблица (sql) с использованием DBGrid (ключевые поля не выведены). Можно в Дельфи получить значение ключевого поля, просто выделив любую ячейку, не используя запрсы SQL? 

Автор: vovk 5.5.2009, 15:21
Если поля есть в датасете (какой там у вас не знаю TQuery, TIBQuey, Tdataset в общем не важно) , а в гриде просто скрыты то конечно да. Если же вы не запрашивали данные по этим полям то нет. Хотя если написать допустим хранимую процедуру которая вернёт вам эти данные.... А вообще без обращения к базе никак..

Автор: insoft 5.5.2009, 15:21
Код

id := DataSet.FieldByName('id').asInteger

как ты отображаешь НД в гриде? через TTable или через TQuery?

Автор: igorz89 5.5.2009, 15:35
У меня 3 компонента: query1, datasource1 и dbgrid1. Сам запрос находится в query1, у datasource1 в свойстве dataset указан этот самый query1, а у dbgrid1 в свойстве datasource указан  datasource1. 
Вот, допустим, таблица "sotrudniki", в ней 2 поля: id(первичный ключ) и name:
id name
1   Вася
2   Федя
3   Паша
4   Саша
Я пишу запрос select name from sotrudniki, мне все выводит как надо без id. Теперь я выделяю, допустим имя Паша, и хочу узнать его id, но при этом не используя запроса типа select id from sotrudniki where name='Паша'. Вот собственно в этом вопрос.

Автор: vovk 5.5.2009, 15:39
Особо не напрягайтесь если в запросе не указывали поле ID то и данных соответственно нет.

Автор: igorz89 5.5.2009, 15:49
Так, а если в самом запросе сделать выборку всех полей, но при этом в DBgrid выводить опять же только имя, то тогда как можно получить соответсвующий id выделенному полю?

Автор: vovk 5.5.2009, 15:56
Если данные в датасете есть, то так как сказал 
insoft, 
в 3 посте самое оно, то есть для вас будет выглядет так
Код

var
id:Integer;
......
.....
....
....

id := query1.FieldByName('id').asInteger

Так на всякий. Мы получим значение поля ID текущей записи Query1. 

Автор: igorz89 5.5.2009, 16:14
vovk, 
insoft, спасибо вам за помощь! 

Автор: Akella 5.5.2009, 16:16
Цитата(igorz89 @  5.5.2009,  15:49 Найти цитируемый пост)
Так, а если в самом запросе сделать выборку всех полей, но при этом в DBgrid выводить опять же только имя, то тогда как можно получить соответсвующий id выделенному полю? 


неужели нужно повторять?
Цитата(insoft @  5.5.2009,  15:21 Найти цитируемый пост)
id := DataSet.FieldByName('id').asInteger


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)