![]() |
| ||
|
|
Новости |
Поиск |
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.
Помогите кто чем может! :(
12 (2010-09-17 14:28:00) [1]
> А методичку писал препод нашего универа
кто бы сомневался. Научен.
Если сдавать - то по медодичке.
А если "parametrs" да "sql.text := "
скажет, "че, самый умный? Умнее меня, типа? "
зы
а реальные вещи пишем так, как надо.
parametrs да sql.text :=
12 (2010-09-17 14:14:00) [2]
> > Вот ТАКОЕ я точно в ХП или View выношу.
уболтали, это, конечно, слишком уже :)
просто боюсь получится, как sniknik предупреждал, - вместо того что б программу править, приходится и программу править и в БД лезть.
а так наглядно все видно, pageup нажать только
Первокурсница (2010-09-17 14:11:00) [3]Всем спасибо =) Не повесилась :D А методичку писал препод нашего универа :(
Palladin (2010-09-17 14:05:00) [4]
> Вот ТАКОЕ я точно в ХП или View выношу.
+1
Anatoly Podgoretsky (2010-09-17 13:49:00) [5]
> AdoDataset.CommandText := ' select'+
> ' field1,'+
и даже так
AdoDataset.CommandText :=
' select'+
' field1,'+
Ega23 (2010-09-17 13:49:00) [6]
> бывает, и так
Вот ТАКОЕ я точно в ХП или View выношу.
Anatoly Podgoretsky (2010-09-17 13:48:00) [7]> 12 (17.09.2010 13:40:42) [42]
но думаю лучше смотрится add('Order By ....');
т.к. меньше в длину строка занимает, и не вылазит за экран
Смотрится ужасно и по второму пункту тоже не выделживает критики
AdoDataset.CommandText := ' select'+
' field1,'+
...
' field1,'+
' Order by' + OrderPart;
Вот это коротко и смотрится не ужасно
Anatoly Podgoretsky (2010-09-17 13:41:00) [8]> Ega23 (17.09.2010 13:30:41) [41]
' Order By %S';
12 (2010-09-17 13:40:00) [9]
> Параметр в ХП.
> База - переходная,
и нафига?
> Ну и потом, я хоть убей не понимаю, кто тебе мешает
> ADOQuery.Text := ADOQuery.Text + ' Order By ....';
да никто :)
и так тоже делаю, бывает.
но думаю лучше смотрится add('Order By ....');
т.к. меньше в длину строка занимает, и не вылазит за экран
ps.
' dfsgdgsdg '+
'sdgsdgsgsdg' ;
тоже пишу, бывает :)
бывает, и так
' select B.FN, B.FI, count(*) as CR from '+#13#10+
' ( '+#13#10+
' select A.ring_id_cisco, A.FN, A.FI from '+#13#10+
' ( '+#13#10+
' select '+#13#10+
' ring_id_cisco, '+#13#10+
' upper(s.FILIAL_NAME) as FN, '+#13#10+
' s.filial_id as FI, '+#13#10+
' count(*) as CountAnswert, '+#13#10+
' SUBSTRING(comment, CHARINDEX('+QuotedStr('#')+',comment)+1, DATALENGTH(comment)) as NameS '+#13#10+
' FROM '+#13#10+
' [ccc].[dbo].[request] r '+#13#10+
' JOIN (select * from openquery(MIS2, '+#13#10+
QuotedStr(' SELECT S.ID_SUBSCRIBER, F.FILIAL_NAME, F.FILIAL_ID ' +
' FROM SUBSCRIBER S JOIN SPRAVKA.FILIALS F ON F.FILIAL_ID = S.FILIAL_ID') +
' )) s ON SUBSTRING(r.comment, 1, CHARINDEX('+QuotedStr('#')+',r.comment)-1) = s.ID_SUBSCRIBER '+#13#10+
' where '+#13#10+
' [id_object] = 1228 '+#13#10+
' and R.id_sct not in (29, 4 ) '+#13#10+
' and start_time between :FDT and :SDT '+#13#10+
' and isNull(SubString(comment,1,DATALENGTH(comment)), '+QuotedStr('')+') <> '+QuotedStr('')+' '+#13#10+
' group by '+#13#10+
' ring_id_cisco, '+#13#10+
' s.filial_id, '+#13#10+
' SUBSTRING(comment, CHARINDEX('+QuotedStr('#')+',comment)+1, DATALENGTH(comment)), '+#13#10+
' upper(s.FILIAL_NAME) '+#13#10+
' ) A '+#13#10+
' group by A.ring_id_cisco, A.FN, A.FI '+#13#10+
' ) B '+#13#10+
' group by B.FN, B.FI ';
pps.
да, а SPRAVKA - знаю, что так англоязычные страны не говорят, это наследство такое.
Ega23 (2010-09-17 13:30:00) [10]
> не делать же выборку по всем возможным хотелкам юзера..
Параметр в ХП.
Ну и потом, я хоть убей не понимаю, кто тебе мешает
ADOQuery.Text := ADOQuery.Text + ' Order By ....';
сделать, если уж на от пошло.
12 (2010-09-17 13:06:00) [11]
> Поля именовать нормально надо.
База - переходная, все мало значимое свалено в одно поле. Comment.
order - динамический
не делать же выборку по всем возможным хотелкам юзера..
Anatoly Podgoretsky (2010-09-17 12:52:00) [12]Не висит, а ждет, когда можно будет прийти еще раз, но как Второкурсница. Не путать с второгодницей, хоть год и второй.
Palladin (2010-09-17 12:34:00) [13]Висит и смотрит.
Anatoly Podgoretsky (2010-09-17 12:28:00) [14]> Плохиш (17.09.2010 12:15:35) [35]
Она со страхом смотрит на вас.
Amoeba_ (2010-09-17 12:21:00) [15]
> Плохиш © (17.09.10 12:15) [35]
Не сглазь!
Плохиш (2010-09-17 12:15:00) [16]Я надеюсь первокурсница ещё не повесилась...
Ega23 (2010-09-17 12:08:00) [17]
> к тому же, как написать такую сортировку, например
Поля именовать нормально надо.
Anatoly Podgoretsky (2010-09-17 12:00:00) [18]А так и писать, но только нужна соответствующая СУБД
12 (2010-09-17 11:58:00) [19]
> Зачем для сортировка ADD?
> Он не знает про Sort.
правда, не знал.
(да и не часто использовал сортировки)
сейчас смотрю реализацию.
Что сказать..не впечатляет. Проще order by дописывать все же думаю
к тому же, как написать такую сортировку, например
order by SUBSTRING(r.comment, CHARINDEX('#',r.comment)-1), CHARINDEX('^',r.comment)+1)
Ega23 (2010-09-17 11:52:00) [20]
> Вот именно что для начинающих, поэтому нафиг это в Базы, тема для
> начинающих - как не надо делать.
Ну тебе виднее.