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.

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


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]


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

Ну тебе виднее.


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

Наверх

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