Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.10.2010, 17:30
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
Смущение Текущий проводник не поддерживает возврат. Ошибка синтаксиса в инструкции UPDATE

Добрый день!
На самостоятельное изучение дали тему "Применение параметров при реализации 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; 
Ошибка - "Ошибка синтаксиса в инструкции UPDATE".
Вот текст всей программы:
Код:
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  
Старый 15.10.2010, 17:49
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Для запроса на удаление ошибка в том, что он неправильно запускается. Следует делать так:
Код:
ADOQuery5.ExecSQL;
А запрос UPDATE написан не верно с точки зрения синтаксиса SQL. Читайте Грубера, там все понятно расписано.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 15.10.2010, 18:06
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
По умолчанию

Большое Вам спасибо
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:44.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025