• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Параметры в Adoquery

  • Автор темы Guest
  • Дата начала
G

Guest

Добрый день! :)
На самостоятельное изучение дали тему "Применение параметров при реализации SQL-запросов". Программа должна реализовывать следующее:
* Добавлять записи в таблицу (INSERT)
* Удалять записи из таблицы (DELETE)
* Редактировать записи в таблице (UPDATE)
* Выдавать информацию о товарах из таблицы, которых на складе осталось меньше введённого количества.
И всё это исключительно с помощью параметров.
Таблица в БД у меня такая:
Поле IDCode (счётчик, первичный ключ)
Поле TovarName (текстовый)
Поле Price (числовой, двойное с плавающей точкой)
Поле Sklad (числовой, длинное целое)
Причём в методичке сказано что данные в неё вносить не нужно, это осуществится с помощью Дельфи, поэтому таблица пустая.
Ну а в Дельфи соответственно 4 ADOQuery, в каждом свои параметры.
Проблемы возникли уже на первой операции (INSERT). Параметры в запросе следующие:
* TName:
DataType - ftString
А вот Value он почему-то "не захотел" делать String, упорно ставит её OleStr. В этом я думаю и заключается проблема :)
*Price:
DataType - ftFloat
Value "само по себе делается" Double и по-другому никак не хочет
*Sklad:
DataType - ftInteger
Value - Integer
В ADOQuery в свойстве SQL код:
Код:
INSERT INTO Table1 (TovarName, Price, Sklad)
Values( :TName, :Price, :Sklad);
Вот текст всей программы:
Код:
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;
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;
ADOQuery1.SQL.Add('SELECT * FROM Table1');
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;
ADOQuery2.SQL.Add('SELECT * FROM Table1');
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;
ADOQuery3.SQL.Add('SELECT * FROM Table1');
end;

procedure TForm1.BitBtn2Click(Sender: TObject); {удалить запись}
begin
ADOQuery4.Parameters.ParamByName('ID_Code').Value:=StrToInt(Edit5.Text);
ADOQuery4.SQL.Add('SELECT * FROM Table1');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ADOQuery1.SQL.Add('SELECT * FROM Table1');
ADOQuery2.SQL.Add('SELECT * FROM Table1');
ADOQuery3.SQL.Add('SELECT * FROM Table1');
ADOQuery4.SQL.Add('SELECT * FROM Table1');
end;

end.
Запустила, вввела в Edit'ы наименование товара, цену, склад, нажимаю кнопку "Добавить" - прога вылетает с ошибкой "Обнаружены символы за пределами инструкции SQL". Ну а другие операции я даже проверить не могу пока эта не станет работать... :)
Подскажите пожалуйста, как побороть эту ошибку?! :(
 

Вложения

  • ____________.rar
    19,4 КБ · Просмотры: 167
G

Guest

Я тут немножко разобралась, изменила кое-какие процедуры...
Вылетать с ошибкой перестало, процедуры INSERT и DELETE работают корректно :)
Но процедура UPDATE так и не хочет работать :)

В процедуре 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;
Ошибка - "Ошибка синтаксиса в инструкции UPDATE".
Как справиться с этой ошибкой? :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!