![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Модификация записей в Access с помощью Delphi
Первокурсница © (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]Посмотрел. Действительно, вообще не стОит им пользоваться. Зачем компонент ввели - непонятно.