![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
Цитата:
, а как их в postgresqlе присваивать, если не секрет)Хотя вот подключился к БД 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 |