|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Добавление/изменение/удаление записей в БД
(Delphi+ADO+Postgresql)
Как менять/добавлять/удалять данные в БД через DBGrid. Тоесть нажал на поле DBGrida, редактировал значение и изменения сохранились в бд. Поставил курсор на строке, удалил её из DBGrida и в бд она тоже удалилась. Создал пустую строку, заполнил ячейки данными и сохранил. Вот как-то так. Вроде говорят через DataSet, кто-нибудь может пару строчек кода, как пример показать ? |
#2
|
|||
|
|||
Код:
procedure TForm5.N1Click(Sender: TObject); begin IF DBGrid1.DataSource=Form1.DataSource1 then Form1.ADOTable1.Append; IF DBGrid1.DataSource=Form1.DataSource2 then Form1.ADOTable2.Append; IF DBGrid1.DataSource=Form1.DataSource3 then Form1.ADOTable3.Append; IF DBGrid1.DataSource=Form1.DataSource4 then Form1.ADOTable4.Append; end; procedure TForm5.N2Click(Sender: TObject); begin If Application.MessageBox('Вы действительно хотите удалить эту запись','!!!Внимание!!!',MB_OKCANCEL)=id_OK then begin IF DBGrid1.DataSource=Form1.DataSource1 then Form1.ADOTable1.Delete; IF DBGrid1.DataSource=Form1.DataSource2 then Form1.ADOTable2.Delete; IF DBGrid1.DataSource=Form1.DataSource3 then Form1.ADOTable3.Delete; IF DBGrid1.DataSource=Form1.DataSource4 then Form1.ADOTable4.Delete; end; end; procedure TForm5.Button1Click(Sender: TObject); begin IF DBGrid1.DataSource=Form1.DataSource1 then begin if Form1.ADOTable1.Modified then Form1.ADOTable1.Post; end; IF DBGrid1.DataSource=Form1.DataSource2 then begin if Form1.ADOTable2.Modified then Form1.ADOTable2.Post; end; IF DBGrid1.DataSource=Form1.DataSource3 then begin if Form1.ADOTable3.Modified then Form1.ADOTable3.Post; end; IF DBGrid1.DataSource=Form1.DataSource4 then begin if Form1.ADOTable3.Modified then Form1.ADOTable3.Post; end; end; N1Click - через popupmenu добавляю N2Click - удаляю редактируется грид сам по себе а Button1Click - кнопка сохранить |
#3
|
|||
|
|||
Ммм, такая фигня возникла, не могу ничего редактировать в ячейках DBGrida. Если подключаться через Table, то всё норм, но через него к POstgresqlю не подключишься, использую ADOConnection, ADOQuery. ReadOnly:=false, всё вроде подключено. ПОчему так ?
|
#4
|
||||
|
||||
Если запрос сложный, т.е. используется несколько таблиц связаных отношением 1:N то так и будет.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
Цитата:
Select * from Table |
#6
|
||||
|
||||
Мдаааа, это действительно чрезвычайно сложный запрос
А ключевые поля в этой табле имеются? Сталкивался как-то с таким при отсутствии таковых тоже невозможно было редактировать, что в общем-то и понятно. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
|||
|
|||
Цитата:
Хотя вот подключился к БД Accessa, с одной таблицей без ключевых полей, всё норм редактирует. Последний раз редактировалось Vavik, 06.05.2009 в 14:58. |
#8
|
||||
|
||||
В БД Accessa, вроде, ключевое поле (счетчик) создается автоматом после сохранения базы.
А создать ключ в SQL как- то так: Код:
CREATE INDEX <index name> ON <table name> (<field name>) или так ALTER TABLE <table name> ADD INDEX <index name> (<field name>) |
#9
|
|||
|
|||
Усё, разобрался. Делал так:
Нажал 2 раза на ADOQuery, появилось окошко Fields editor, потом кликаем на нём правой кнопкой и выбираем add all Fields, ну а там выбираем поле и в свойстве Readonly ставим false |