Параметры в Adoquery

Тема в разделе "Delphi - FAQ", создана пользователем -, 15 окт 2010.

  1. Гость

    Добрый день! :)
    На самостоятельное изучение дали тему "Применение параметров при реализации 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 код:
    Код (Delphi):
    INSERT INTO Table1 (TovarName, Price, Sklad)
    Values( :TName, :Price, :Sklad);
    Вот текст всей программы:
    Код (Delphi):
    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". Ну а другие операции я даже проверить не могу пока эта не станет работать... :)
    Подскажите пожалуйста, как побороть эту ошибку?! :(
     

    Вложения:

  2. Гость

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

    В процедуре UPDATE нужно опять же ввести в Edit ID_Code товара, внести в соответствующие Edit'ы наименование товара, цену и количество его на складе, нажать кнопку "Изменить" и радоваться результатам. Но результатов-то как раз-таки и нету:(
    В ADOQuery отвечающем за эту процедуру SQL код:
    Код:
    Код (Delphi):
    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

    Процедура:
    Код (Delphi):
    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".
    Как справиться с этой ошибкой? :)
     
  3. Гость

    Большущее спасибо, заработало ;)
     
Загрузка...

Поделиться этой страницей