Модификация записей в Access с помощью Delphi

  • Автор темы -
  • Дата начала
Статус
Закрыто для дальнейших ответов.

Гость
#1
Всем Привет! :blush:
Задали на самостоятельное изучение тему "Как с помощью программы 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.
Помогите пожалуйста кто чем может! :facepalm:
 
E

etc

Гость
#2
Научитесь использовать параметры в запросах, т.е. вот это - + Edit1.Text+ и есть ваша проблемма. С параметрами ее не будет.
И еще, TDBAware (TDBEdit и иже) компоненты надо использовать, тоже помогает.

Добавлено: Ну или на крайний случай http://codeby.net/forum/threads/37453.html?vi...st&p=182613
 
Статус
Закрыто для дальнейших ответов.