![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Добрый день!
![]() На самостоятельное изучение дали тему "Применение параметров при реализации SQL-запросов". Программа должна реализовывать следующее: * Добавлять записи в таблицу (INSERT) * Удалять записи из таблицы (DELETE) * Редактировать записи в таблице (UPDATE) * Выдавать информацию о товарах из таблицы, которых на складе осталось меньше введённого количества. И всё это исключительно с помощью параметров. Таблица в БД у меня такая: Поле IDCode (счётчик, первичный ключ) Поле TovarName (текстовый) Поле Price (числовой, двойное с плавающей точкой) Поле Sklad (числовой, длинное целое) Причём в методичке сказано что данные в неё вносить не нужно, это осуществится с помощью Дельфи, поэтому таблица пустая. Ну а в Дельфи соответственно 4 ADOQuery, в каждом свои параметры. Процедура INSERT работает корректно. Но не работают процедуры DELETE и UPDATE ![]() В процедуре DELETE нужно ввести ID_Code товара в Edit, нажать кнопку и товар должен исчезнуть. В ADOQuery отвечающем за эту процедуру SQL код: Код:
DELETE FROM Table1 WHERE IDCode=:ID_Code; ID_Code: DataType - ftInteger Value - Integer Процедура: Код:
procedure TForm1.BitBtn2Click(Sender: TObject); {удалить запись} begin ADOQuery4.Active:=false; ADOQuery4.Parameters.ParamByName('ID_Code').Value:=StrToInt(Edit5.Text); ADOQuery4.Active:=true; ADOQuery5.SQL.Text:='SELECT * FROM Table1'; ADOQuery5.Open; end; А в процедуре UPDATE нужно опять же ввести в Edit ID_Code товара, внести в соответствующие Edit'ы наименование товара, цену и количество его на складе, нажать кнопку "Изменить" и радоваться результатам. Но результатов-то как раз-таки и нету ![]() В ADOQuery отвечающем за эту процедуру SQL код: Код:
UPDATE Table1 SET (:TName, :Price, :Sklad) WHERE IDCode=:ID_Code; ID_Code DataType - ftInteger Value - Integer TName DataType - ftString Value - OleStr Price DataType - ftFloat Value - Double Sklad DataType - ftInteger Value - Integer Процедура: Код:
procedure TForm1.BitBtn3Click(Sender: TObject); {редактировать запись} begin ADOQuery3.Parameters.ParamByName('ID_Code').Value:=StrToInt(Edit5.Text); ADOQuery3.Parameters.ParamByName('TName').Value:=Edit1.Text; ADOQuery3.Parameters.ParamByName('Price').Value:=StrToFloat(Edit2.Text); ADOQuery3.Parameters.ParamByName('Sklad').Value:=StrToInt(Edit3.Text); ADOQuery3.ExecSQL; ADOQuery5.SQL.Text:='SELECT * FROM Table1'; AdoQuery5.Open; end; Вот текст всей программы: Код:
unit LAB7Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Grids, DBGrids, DB, ADODB; type TForm1 = class(TForm) ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; DataSource1: TDataSource; DBGrid1: TDBGrid; BitBtn1: TBitBtn; BitBtn2: TBitBtn; BitBtn3: TBitBtn; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label5: TLabel; Edit4: TEdit; BitBtn4: TBitBtn; ADOQuery2: TADOQuery; DataSource2: TDataSource; ADOQuery3: TADOQuery; DataSource3: TDataSource; ADOQuery4: TADOQuery; DataSource4: TDataSource; Edit5: TEdit; Label6: TLabel; ADOQuery5: TADOQuery; DataSource5: TDataSource; procedure BitBtn4Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure BitBtn3Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; X: integer; implementation {$R *.dfm} procedure TForm1.BitBtn4Click(Sender: TObject); {инф-ия о товаре из табл.1, кот. на складе осталось меньше указанного кол-ва} begin ADOQuery1.Active:=false; ADOQuery1.Parameters.ParamByName('NS').Value:=StrToInt(Edit4.Text); ADOQuery1.Active:=true; ADOQuery5.SQL.Text:='SELECT * FROM Table1'; AdoQuery5.Open; end; procedure TForm1.BitBtn1Click(Sender: TObject); {Добавить записи в табл.1} begin ADOQuery2.Parameters.ParamByName('TName').Value:=Edit1.Text; ADOQuery2.Parameters.ParamByName('Price').Value:=StrToFloat(Edit2.Text); ADOQuery2.Parameters.ParamByName('Sklad').Value:=StrToInt(Edit3.Text); ADOQuery2.ExecSQL; ADOQuery5.SQL.Text:='SELECT * FROM Table1'; AdoQuery5.Open; end; procedure TForm1.BitBtn3Click(Sender: TObject); {редактировать запись} begin ADOQuery3.Parameters.ParamByName('ID_Code').Value:=StrToInt(Edit5.Text); ADOQuery3.Parameters.ParamByName('TName').Value:=Edit1.Text; ADOQuery3.Parameters.ParamByName('Price').Value:=StrToFloat(Edit2.Text); ADOQuery3.Parameters.ParamByName('Sklad').Value:=StrToInt(Edit3.Text); ADOQuery3.ExecSQL; ADOQuery5.SQL.Text:='SELECT * FROM Table1'; AdoQuery5.Open; end; procedure TForm1.BitBtn2Click(Sender: TObject); {удалить запись} begin ADOQuery4.Active:=false; ADOQuery4.Parameters.ParamByName('ID_Code').Value:=StrToInt(Edit5.Text); ADOQuery4.Active:=true; ADOQuery5.SQL.Text:='SELECT * FROM Table1'; ADOQuery5.Open; end; procedure TForm1.FormCreate(Sender: TObject); {процедура просмотра содержимого всех полей таблицы} begin ADOQuery5.SQL.Text:='SELECT * FROM Table1'; end; ![]() |
#2
|
||||
|
||||
![]() Для запроса на удаление ошибка в том, что он неправильно запускается. Следует делать так:
Код:
ADOQuery5.ExecSQL; Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
||||
|
||||
![]() Большое Вам спасибо
![]() |