Как изменить данные рекордсета, открытого через TQuery?
1. На форме лежит связка: TQuery, TDataSource и DBGrid.
В TQuery простой запрос: "select * from User order by Name".
Необходимо сделать возможность редактирования поля Name. Как это попроще сделать средствами Builder'а? Устроил бы даже вариант прямого редактирования в DBGrid, но можно и в отдельном компоненте, в который попадает значение поля Name, при выделении записи в DBGrid'е.
2. Как средствами Builder'a запускать SQL запросы на редактирование, добавление, удаление записей? Т.е. запросы типа: "update User set User.Name = 'Вова' where ID = 28" ?
Поможите :confused:
SQL-запросы реализуйте при помощи TQuery. Задайте нужный запрос в Query->SQL, затем выполните при помощи Query->ExecSQL.
Возможно Вам будет удобнее воспользоваться компонентом DBNavigator (вкладка DataControls). В этом случае с его помощью можно будет добавлять новые строки и задавать их значения прямо в DBGid.
Если Вы не работали ранее с базами данных в Builder или Delphi, могу посоветовать книгу Б.С.Послед - Borland C++ Builder 6. Разработка приложений баз данных. Ее можно скачать например отсюда:
http://wmate.ru/ebooks/book243.html
Можете еще посмотреть принципы работы с TQuery, TTable и др.:
http://aptem.net.ru/programming/c/index.shtml.htm
Вариант второй: положить на форму и связать с запросом объект UpdateSQL. В этом объекте пишутся ТРИ запроса - добавление, изменение, удаление - которые будут автоматически вызваться при соответствующих действиях.
Вариант три, самый простой: перейти на ADO.
Компоненты ADOQuery и ADODataSet УЖЕ имеют все возможности для синхронизации исходных таблиц БД с изменениями конечного набора данных. Достаточно только указать для перечисляемого свойства LockType значение Optimimstic. Если указать значение BatchOptimistic, то ВСЕ изменения в наборе данных будут вноситься в таблицы по дополнительной команде (метод BatchUpdate)