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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2010, 22:00   #1
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
Смущение Модификация записей в Access из Delphi

Доброго времени суток!
Задали на самостоятельное изучение тему "Как с помощью программы Delphi добавлять, удалять и редактировать записи в таблице Access".
Написала программу, следуя указаниям методички, она должна соответственно добавлять, удалять и редактировать записи.
Но возникло 2 проблемы:
- Программа не редактирует записи, только удаляет и добавляет нормально
- После нажатия кнопок "Добавить" или "Удалить" DBGrid1 на форме очищается, а этого быть не должно, нужно чтобы добавленные/удалённые/изменённые записи сразу же отображались на DBGrid1, без перезапуска программы.
вот код:
Код:
unit LAB3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls;

type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    DBGrid1: TDBGrid;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure DBGrid1CellClick(Column: TColumn);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  X: integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); {Добавление записей}
begin
ADOQuery1.Active:=false;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('INSERT INTO Таблица1');
ADOQuery1.SQL.Add('(TovarName,Price,Sklad)');
ADOQuery1.SQL.Add('VALUES("'+ Edit1.Text +'",'+Edit2.Text+','+ Edit3.Text+')');
ADOQuery1.ExecSQL;
end;

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
X:=DataSource1.DataSet.FieldByName('IDCode').AsInteger;
end;

procedure TForm1.Button2Click(Sender: TObject); {Удаление записей}
begin
ADOQuery1.Active:=false;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('DELETE FROM Таблица1');
ADOQuery1.SQL.Add('WHERE IDCode='+ IntToStr(X));
ADOQuery1.ExecSQL;
end;

procedure TForm1.Button3Click(Sender: TObject); {Редактирование записей}
begin
ADOQuery1.Active:=false;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('UPDATE Таблица1');
ADOQuery1.SQL.Add('SET TovarName='+'"'+ Edit1.Text+'"'+
                                 ',Price='+Edit2.Text+
                                 ',Sklad='+Edit3.Text);
ADOQuery1.SQL.Add('WHERE IDCode='+IntToStr(X));
ADOQuery1.ExecSQL;
end;

end.
Прошу помощи!
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Старый 17.09.2010, 00:13   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) чтобы DBGrid на форме не очищался, киньте на форму ЕЩЁ один AdoQuery и все операции по изменению данных производите через него (ну, или наоборот, чтобы меньше переписывать, свяжите DataSource1, который у Вас сейчас, видимо, связан с AdoQuery1 свяжите с тем новым ADOQuery, который Вы кинете на форму.

2) чтобы данные после выполнения операций появлялись в DBGrid
после .QxecSQL выполните обновление того ADOQuery, который у Вас будет связан с DBGrid (через datasource, разумеется).
Например, если этот новый ADOQuery называется AdoQuery4Grid:
Код:
ADOQuery1.ExecSQL;
   AdoQuery4Grid.Refresh;
если .Refresh не поможет - тогда 100% поможет ADOQuery1.Close; ADOQuery1.Open; - но тогда текущей записью станет первой... поэтому лучше использовать .Refresh


Цитата:
Программа не редактирует записи
ну, в коде вроде бы всё нормально. Как именно не редактирует? Ошибка какая нибудь возникает? Или что?

Последний раз редактировалось Serge_Bliznykov; 17.09.2010 в 00:15.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.09.2010, 14:23   #3
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
По умолчанию

Большое спасибо!

Не редактирует-просто ничего не происходит. Вот я щёлкаю запись которую хочу изменить, пишу в эдитах то что хочу изменить, жму кнопку-и тишина... Пробовала также сначала писать изменения, потом выбирать запись, потом жать кнопку-тот же результат
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..

Последний раз редактировалось Stilet; 17.09.2010 в 15:15.
ulala вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление и удаление записей из БД (Access) a_n_n_a БД в Delphi 26 02.01.2016 18:13
Посчитать количество записей в БД ACCESS Dux БД в Delphi 22 31.03.2015 20:36
Кол-во похожих записей БД Access one1991 БД в Delphi 14 30.05.2010 12:41
Тормоза при добавлении записей в БД MS Access Vit@L БД в Delphi 12 17.05.2010 09:03
Многотабличные запросы! (модификация данных). MSSQL +Delphi MoGiLsHiKK БД в Delphi 1 25.12.2007 16:21