Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Страницы:   1 2 3

Первокурсница ©   (2010-09-16 20:59:00) 

Доброго времени суток!
Задали на самостоятельное изучение тему "Как с помощью программы 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.

Помогите кто чем может! :(


Anatoly Podgoretsky   (2010-09-17 11:49:00) [21]

> Ega23  (17.09.2010 11:47:28)  [28]

Вот именно что для начинающих, поэтому нафиг это в Базы, тема для
начинающих - как не надо делать.


Ega23   (2010-09-17 11:48:00) [22]


> Зачем для сортировка ADD?


Он не знает про Sort.


Ega23   (2010-09-17 11:47:00) [23]


> А что скажешь про оптимальность, постоянные преобразования
> в Text и обратно.
> Не так давно тут был вопрос про скорость, после того как
> автор ушел на
> TAdoDataset у него скорость повысилась в два раза.


Давайте уже срач в Базы перенесём? Или из небытия последний подымем?
Тут всё-таки для начинающих...


Anatoly Podgoretsky   (2010-09-17 11:46:00) [24]

> 12  (17.09.2010 11:22:17)  [17]

Зачем для сортировка ADD?


Anatoly Podgoretsky   (2010-09-17 11:44:00) [25]

> Palladin  (17.09.2010 11:08:12)  [12]

А Jet никуда не делся.
А что скажешь про оптимальность, постоянные преобразования в Text и обратно.
Не так давно тут был вопрос про скорость, после того как автор ушел на
TAdoDataset у него скорость повысилась в два раза.


И. Павел   (2010-09-17 11:42:00) [26]

> Собственно, твоё препарирование запросов - такой же частный
> случай,

Верно. Но если в частном случае возникает ошибка - это ошибка. А если в частном случае программа работает правильно - это еще не значит, что программа работает правильно в других ситуациях.


Anatoly Podgoretsky   (2010-09-17 11:42:00) [27]


> Посмотрел. Действительно, вообще не стОит им пользоваться.
>  Зачем компонент ввели - непонятно.

Объясняли - это любимая фишка Борланда, у любого компонента должен быть механизм Query с его методом Add - а то не дай бог программист не сможет написать запрос без ADD


Anatoly Podgoretsky   (2010-09-17 11:41:00) [28]


> например, при динамической генерации запроса по частям,
> или просто так нравится - ведь метод открыт, значит должен
> работать).

Можно динамически генерировать по частя и без АДД, а то как бя я жил с TAdoDatase, ведь там нет ADD


Anatoly Podgoretsky   (2010-09-17 11:38:00) [29]


> Ошибки связаны с парсированием только части запроса - этот
> вопрос обсуждался тут раньше, да и на delphikingdom всплывал.
>  А метод Add провоцирует пользователя вводить запрос по
> частям.

А .Text разбивать его на части :-)


Ega23   (2010-09-17 11:37:00) [30]

Никакого частного случая, всё в рамках документации.
Собственно, твоё препарирование запросов - такой же частный случай, когда ADOConnection подсоединён либо ConnectionString задан.


И. Павел   (2010-09-17 11:34:00) [31]

> Если ты считаешь, что чем-то удивил, то нет:

Удивить я никого не хотел. Хотел показать, что [15] (как и [19]) - такой же частный случай, как в [14], на основе которого нельзя делать выводы.


Ega23   (2010-09-17 11:27:00) [32]


> Вам показать, как время-от времени корректно завершается процедура:

Если ты считаешь, что чем-то удивил, то нет:

type

 TMyObj = class (TObject)
 public
   procedure Work;
 end;

 TForm7 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form7: TForm7;

implementation

{$R *.dfm}

{ TMyObj }

procedure TMyObj.Work;
begin
 ShowMessage('TMyObj.Work');
end;

procedure TForm7.Button1Click(Sender: TObject);
var
 obj: TMyObj;
begin
 obj.Work;
end;

end.


Ega23   (2010-09-17 11:24:00) [33]


> когда сортировку надо сделать, например. Там ему самое место,
>  имхо.


ADODataSet.Sort


12   (2010-09-17 11:22:00) [34]

ну SQL.Add использовать можно все-таки
когда сортировку надо сделать, например. Там ему самое место, имхо.


Ega23   (2010-09-17 11:20:00) [35]


> SQL.Add - написано во многих методичках.

Не знаю, я никаких методичек в силу возраста не видел. SQL.Add вообще никогда не писал, даже под BDE (а нафига?).

> а его еще, кажись, DimkaMaslov, кажись, в 2006-7м гг отучил.

Ему многие этим тыкали. :)


И. Павел   (2010-09-17 11:18:00) [36]


> Предварительного парсинга может и не быть, если чё.

Может и не быть, а может и быть. Вам показать, как время-от времени корректно завершается процедура:

procedure a(b: integer);
var obj: TObj;
begin
 if b>100 then
   obj.v := 100;
end;

?

> ну.... понеслось г..но по трубам.

А кто был инициатором?


Ega23   (2010-09-17 11:12:00) [37]


> Этим грешат те, кто не знает о предварительном парсинге запроса

ну.... понеслось г..но по трубам.
Предварительного парсинга может и не быть, если чё.
Тебе показать, как будет абсолютно корректно работать код
with ADOQuery1.SQL do
begin
 Clear;
 Add('Select');
 Add('*');
 Add('from');
 Add('Table1');
end;

?


12   (2010-09-17 11:11:00) [38]

SQL.Add - написано во многих методичках. Значит, так правильно :)
не стоит переубеждать тех, кому "все это программирование" не нужно.


> Ega23 ©   (17.09.10 11:04) [9]

а его еще, кажись, DimkaMaslov, кажись, в 2006-7м гг отучил..


Palladin   (2010-09-17 11:08:00) [39]


> И. Павел ©

расслабся... ошибка с парсером параметров была только в драйвере jet и в старых версиях....


Ega23   (2010-09-17 11:08:00) [40]

Посмотрел. Действительно, вообще не стОит им пользоваться. Зачем компонент ввели - непонятно.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо