Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.04.2009, 01:40
Vavik Vavik вне форума
Прохожий
 
Регистрация: 21.04.2009
Сообщения: 5
Репутация: 10
По умолчанию Добавление/изменение/удаление записей в БД

(Delphi+ADO+Postgresql)

Как менять/добавлять/удалять данные в БД через DBGrid.
Тоесть нажал на поле DBGrida, редактировал значение и изменения сохранились в бд.
Поставил курсор на строке, удалил её из DBGrida и в бд она тоже удалилась.
Создал пустую строку, заполнил ячейки данными и сохранил. Вот как-то так.
Вроде говорят через DataSet, кто-нибудь может пару строчек кода, как пример показать ?
Ответить с цитированием
  #2  
Старый 28.04.2009, 13:51
ParusB ParusB вне форума
Прохожий
 
Регистрация: 27.04.2009
Сообщения: 5
Репутация: 10
По умолчанию

Код:
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  
Старый 06.05.2009, 08:38
Vavik Vavik вне форума
Прохожий
 
Регистрация: 21.04.2009
Сообщения: 5
Репутация: 10
По умолчанию

Ммм, такая фигня возникла, не могу ничего редактировать в ячейках DBGrida. Если подключаться через Table, то всё норм, но через него к POstgresqlю не подключишься, использую ADOConnection, ADOQuery. ReadOnly:=false, всё вроде подключено. ПОчему так ?
Ответить с цитированием
  #4  
Старый 06.05.2009, 11:30
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,714
Репутация: 52347
По умолчанию

Если запрос сложный, т.е. используется несколько таблиц связаных отношением 1:N то так и будет.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 06.05.2009, 12:12
Vavik Vavik вне форума
Прохожий
 
Регистрация: 21.04.2009
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Если запрос сложный, т.е. используется несколько таблиц связаных отношением 1:N то так и будет.

Select * from Table
Ответить с цитированием
  #6  
Старый 06.05.2009, 12:23
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,714
Репутация: 52347
По умолчанию

Мдаааа, это действительно чрезвычайно сложный запрос
А ключевые поля в этой табле имеются? Сталкивался как-то с таким при отсутствии таковых тоже невозможно было редактировать, что в общем-то и понятно.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 06.05.2009, 12:50
Vavik Vavik вне форума
Прохожий
 
Регистрация: 21.04.2009
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Мдаааа, это действительно чрезвычайно сложный запрос
А ключевые поля в этой табле имеются? Сталкивался как-то с таким при отсутствии таковых тоже невозможно было редактировать, что в общем-то и понятно.
Эммм, не имеются , а как их в postgresqlе присваивать, если не секрет)

Хотя вот подключился к БД Accessa, с одной таблицей без ключевых полей, всё норм редактирует.

Последний раз редактировалось Vavik, 06.05.2009 в 14:58.
Ответить с цитированием
  #8  
Старый 06.05.2009, 15:32
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

В БД Accessa, вроде, ключевое поле (счетчик) создается автоматом после сохранения базы.

А создать ключ в SQL как- то так:
Код:
CREATE INDEX <index name> ON <table name>  (<field name>)
или так
ALTER TABLE <table name> ADD INDEX <index name>  (<field name>) 
Ответить с цитированием
  #9  
Старый 06.05.2009, 17:36
Vavik Vavik вне форума
Прохожий
 
Регистрация: 21.04.2009
Сообщения: 5
Репутация: 10
По умолчанию

Усё, разобрался. Делал так:
Нажал 2 раза на ADOQuery, появилось окошко Fields editor, потом кликаем на нём правой кнопкой и выбираем add all Fields, ну а там выбираем поле и в свойстве Readonly ставим false
Ответить с цитированием
Ответ



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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:12.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2020

ВКонтакте   Facebook   Twitter