1 2 3 4 5 |
INSERT INTO Teachers (КодУчителя, Фамилия, Имя, Отчество, Предмет, НомерТелефона) VALUES(1, Антипина, Светлана, Бронислововна, БД, 23432); INSERT INTO Teachers (КодУчителя, Фамилия, Имя, Отчество, Предмет, НомерТелефона) VALUES(2, Наговицына, Елена, Александровна, Информ, 21122); INSERT INTO Teachers (КодУчителя, Фамилия, Имя, Отчество, Предмет, НомерТелефона) VALUES(3, Сычева, Наталья, Витальевна, Информ, 21132); INSERT INTO Teachers (КодУчителя, Фамилия, Имя, Отчество, Предмет, НомерТелефона) VALUES(4, Сычёв, Даниил, Витальевич, Физра, 23444); INSERT INTO Teachers (КодУчителя, Фамилия, Имя, Отчество, Предмет, НомерТелефона) VALUES(5, Чепырина, Валентина, Александровна, Экология, 23422); |
Добрый день!
На самостоятельное изучение дали тему «Применение параметров при реализации 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». Ну а другие операции я даже проверить не могу пока эта не станет работать…
Подскажите пожалуйста, как побороть эту ошибку?!
#1 11.05.2020 13:59:47
- SuperDelfi
- Участник
- Зарегистрирован: 11.05.2020
- Сообщений: 1
Обнаружены символы за пределами инструкции
Необходимо было перехватить код, только что добавленной строки, использовал @@Identity т.к база данных находится на access
INSERT INTO [Автошкола]
([Фамилия], [Имя], [Отчество], [Пол], [Гражданство], [Дата_рождения], [Кол-во], [Категория], [Дата_приёма_на_работу], [Код_прохождения], [Код_принятия], [Код_должности], [Адрес_проживания], [Телефон])
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
SELECT @@IDENTITY
Выдаёт ошибку о том что «Обнаружены символы за пределами инструкции»
Крик души!
Неактивен
#2 11.05.2020 20:53:43
- deadka
- Администратор
- Зарегистрирован: 14.11.2007
- Сообщений: 2415
Re: Обнаружены символы за пределами инструкции
На данном форуме разбираются вопросы по MySQL, Вам имеет смысл обратиться на форум по Microsoft Access.
Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли…
Неактивен
Ele
-
#1
Здравствуйте! Помогите пожалуйста разобраться, где ошибка…..
Выдает ошибку, что пропущена точка с запятой в конце конструкции SQL…однако на точку с запятой выдает, что обнаружены символы за пределами инструкции SQL…
procedure TForm4.Button1Click(Sender: TObject);
Var
p1,p2,p3:string;
begin
DataModule2.ADOConnection1.BeginTrans;
try
p1:=Edit1.Text;
p2:=Edit2.Text;
p3:=Edit3.Text;
with DataModule2.ADOQuery1 do
Begin
Close;
SQL.Clear;
SQL.Add(‘insert into uch (raz,dva,tri) values (»’+p1+»’,»’+p2+»’,»’+p3+»’)’);
SQL.Add(‘select *’);
SQL.Add(‘from uch’);
Open;
End;
DataModule2.ADOConnection1.CommitTrans;
ShowMessage(‘Äîáàâëåíèå ïðîøëî óñïåøíî!’);
Form4.DBGrid1.DataSource:=DataModule2.DataSource1;
except
DataModule2.ADOConnection1.RollbackTrans;
ShowMessage(‘Ïðîèçîøëà îøèáêà!’);
end;
end;
SNike
-
#2
Какая база данных? И какие типы данных у столбцов?
Ele
-
#3
База в Access, столбцы-текстовые
etc
-
#4
Выбросить квери, и юзать параметры.
DZX
-
#5
Две команды в одном запросе, ненадо… по очереди…
V88
-
#6
Два запроса в один и тот же TQuery нельзя добавлять и тем более один из выборка, а другой действие!
|
|
|
Строка команды SQL
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Junior Рейтинг (т): 1 |
Подскажите, пожалуйста, какую строку команды запроса надо ввесли в объект OleDbCommand, чтобы считать две таблицы из БД? SELECT * FROM T1; «+» SELECT * FROM T2 «- выдает: «Обнаружены символы за пределами инструкции SQL» Сообщение отредактировано: Bas — 01.07.09, 15:37 |
Бобёр |
|
бухантер Рейтинг (т): 120 |
так вроде ж нельзя 2 сразу то.. |
![]() Akina |
|
«SELECT * FROM T1 UNION SELECT * FROM T2;» |
![]() Bas |
|
Цитата Akina @ 01.07.09, 14:58 SELECT * FROM T1 UNION SELECT * FROM T2; Если только структуры одинаковые. Цитата __Dim__ @ 01.07.09, 14:40 чтобы считать две таблицы из БД SELECT * FROM T1, T2 |
![]() Akina |
|
Цитата Bas @ 01.07.09, 15:36 Если только структуры одинаковые. А иначе постановка вопроса теряет всякий смысл… |
jManiak |
|
А мне кажется Автору нужно просто выполнить два запроса к СУБД, но он хочет впихнуть их в однй операцию |
__Dim__ |
|
Junior Рейтинг (т): 1 |
Спасибо всем |
![]() Akina |
|
Цитата __Dim__ @ 01.07.09, 18:06 необходимо загрузить все БД, хотя структуры таблиц разные Ну тогда это нерешаемо… или нужно все соответствующие выбираемые поля приводить к одинаковому типу, скажем строковому. SELECT CStr(Date) As Date, CStr(Amount) As Amount, Name FROM Table1 UNION SELECT CStr(Date(DateTime)), strValue, CStr(Articul) FROM T2 |
__Dim__ |
|
Junior Рейтинг (т): 1 |
Понятно, спасибо |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Базы данных: Общие вопросы
- Следующая тема
[ Script execution time: 0,0367 ] [ 15 queries used ] [ Generated: 6.09.23, 15:40 GMT ]