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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2019, 11:03   #1
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию Редактирование записи по указанной строчке DBGrid

Добрый день.
Есть связанные 4 таблицы, в основную таблицу main_t, пользователи (!) только заносят данные. По запросу
Код:
    
  With ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT login, main_t.b_time, main_t.e_time, units_t.unit, contrs_t.contrs');
    SQL.Add('FROM main_t');
    SQL.Add('JOIN users_t ON (id_users=main_t.id_logins)');
    SQL.Add('JOIN contrs_t ON (main_t.id_contr=contrs_t.id_contrs)');
    SQL.Add('JOIN units_t ON (main_t.id_units=id_unit)');

    Active := true;
  end;
вывожу данные в DBGrid...
Всё хорошо, но вот задача, как по указанной строчке в DBGrid отредактировать запись в таблице main_t?
Как это правильно организовать?
(случилось так, что программу с СУБД пишу впервые)
iskurt вне форума Ответить с цитированием
Старый 20.02.2019, 11:08   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от iskurt Посмотреть сообщение
Всё хорошо, но вот задача, как по указанной строчке в DBGrid отредактировать запись в таблице main_t?
судя по всему - никак.
Вы же id не вытягиваете запросом, без идентификаторов непонятно, как Вы собираетесь строки в гриде различать.

ну и непонятно (мне лично) что у Вас хранится в таблице main_t и что Вам там нужно редактировать.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.02.2019, 11:19   #3
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию

На счет ID согласен, исправлюсь.
Хранятся записи о действиях сотрудников с контрагентами:
Пользователь, датавремя_начало, датавремя_конец, операция, контрагент

Вот тут мне идею подкинули на счет ListView, что скажете?
iskurt вне форума Ответить с цитированием
Старый 20.02.2019, 11:27   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от iskurt Посмотреть сообщение
На счет ID согласен, исправлюсь.
исправляйтесь.


Цитата:
Сообщение от iskurt Посмотреть сообщение
Хранятся записи о действиях сотрудников с контрагентами:
Пользователь, датавремя_начало, датавремя_конец, операция, контрагент
ну и зачем их исправлять?
нет. даже не так. Что именно Вы собираетесь редактировать в этой строке?

А как будут добавляться новые пользователи, новые операции, новые контрагенты Вы уже решили?

Цитата:
Сообщение от iskurt Посмотреть сообщение
Вот тут мне идею подкинули на счет ListView, что скажете?
Так это ваше дело - чем отображать данные и как давать их редактировать.
ListView подходит - берите его.

Вы просто не о том думаете.
Вам нужно решать задачи о бизнес-процессах - что, как и кому можно изменять.
А Вы, вместо этого, выбираете инструмент, КАК это обеспечить.
Это тоже нужно. Но это вторично.
Во главу угла нужно ставить ТЗ.
потом, согласно ТЗ, описывать логику работы.
а потом уже кодировать.

имхо как-то так.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.02.2019, 11:47   #5
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию

добавление в справочники ПОЛЬЗОВАТЕЛИ и КОНТРАГЕНТЫ, а так же ОПЕРАЦИИ уже организовано через другие таблицы.
Пользователь заполняет главную таблицу только внося данные о начале и концовки операции, данные по контрагентам и тд. выбираются из справочников...
Вопрос в том, что как пользователю исправить свою строку внесенную ранее, к примеру пользователь хочет исправить, что он внес не ту операцию из справочника, или же время поменять, или же контрагента...
КОМУ - это уже решено, для этого организована система доступа с правами пользователей. Есть справочник ПОЛЬЗОВАТЕЛИ, он связан со справочником РОЛИ ПОЛЬЗОВАТЕЛЕЙ...
Так вот мне то как раз и нужно КАК! Я просто не знаю этого, это для меня новое.
iskurt вне форума Ответить с цитированием
Старый 20.02.2019, 11:48   #6
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию

как из DBGrid выбрать запись для редактирования, при условии, что DBGrid заполнен с помощью ADOQuery?
Вот по-этому и спрашиваю, каким способом редактировать? Мне подсказали ListView - но почитав справку, понимаю что заполнять его придется кодом в циклах... ё-ма-ё!
iskurt вне форума Ответить с цитированием
Старый 20.02.2019, 11:56   #7
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию

А вообще-то, идея с ID оччччень к стати... спасибо за подсказу...
Теперь вопрос... можно ли по действиям с записями DBGrid узнать значения ячейки? ))) OnCellClick - но как правильно получить данные?
iskurt вне форума Ответить с цитированием
Старый 20.02.2019, 11:59   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от iskurt Посмотреть сообщение
как из DBGrid выбрать запись для редактирования, при условии, что DBGrid заполнен с помощью ADOQuery?
визуально или в коде программы?

визуально - это как Вы решите. например, кнопочка "Редактировать" или банально двойной клик по строке в гриде.
дальше можно открывать inplace редактором и изменять прямо в гриде.
можно вынести записи под грид (см. dbNavigator)
можно открыть форму редактирования - и там уже полная свобода изменять что нужно. В форме кнопки "Отменить" / "Сохранить"

наверняка есть и другие варианты.
Вам выбирать.

в коде программы - получать событие, брать выделенную строчку из грид, получать id записи и по ней уже выводить форму, например.


Цитата:
Сообщение от iskurt Посмотреть сообщение
Теперь вопрос... можно ли по действиям с записями DBGrid узнать значения ячейки? )))
DBGrid не содержит данных. это лишь средство их визуализации.
Данные находятся в наборе данных (Dataset), который связан с гридом. вот оттуда их и берите.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.02.2019, 12:05   #9
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
можно открыть форму редактирования - и там уже полная свобода изменять что нужно. В форме кнопки "Отменить" / "Сохранить"

в коде программы - получать событие, брать выделенную строчку из грид, получать id записи и по ней уже выводить форму, например.
Вот теперь вы меня поняли.... мне нужно получить id записи выделенной строки в гриде (аж заулыбался, так как даже сам понял) Форму выведу, это не вопрос, может у вас есть готовое решение как получить id записи выделенной в гриде?
iskurt вне форума Ответить с цитированием
Старый 20.02.2019, 12:08   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от iskurt Посмотреть сообщение
мне нужно получить id записи выделенной строки в гриде
Так оно уже есть у Вас.

просто выведите значение поля
Код:
MyDBGrid.DataSource.DataSet.FieldByName("id").Value
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактирование записи выбранной в DBGrid TYMON C++ Builder 4 28.05.2015 13:47
Добавление записи из одного DBGrid в другой DBGrid c помощью кнопки, а также удаление записи Evgen7 БД в Delphi 20 16.02.2014 17:05
Редактирование записи, указанной в DBGrid Utkin БД в Delphi 9 25.01.2014 20:04
Редактирование текущей записи Dbgrid -=pasha=- Общие вопросы Delphi 9 19.02.2013 03:16
Ошибка 2105 Невозможно перейти к указанной записи tolstoy Microsoft Office Access 2 05.03.2012 16:36