0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 35
1

При удалении строки из БД SQL возникает ошибка "ожидается параметр '@id'"

09.10.2012, 16:54. Показов 2215. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я вообщем написал процедуру в SQL server MSE для удаление строки из БД по ID. Код получилсь такой:

SQL
1
2
3
4
5
CREATE PROCEDURE del_pokupatel(@id INT)
AS
BEGIN
DELETE FROM pokupatel WHERE @id=1
END
потом в самом Delphi 7 вызываю ее:

Delphi
1
2
3
4
5
6
7
8
9
with Unit2.DataModule2.help_ADOQuery do
begin
Close;
SQL.Clear;
SQL.Add('exec del_pokupatel');
ExecSQL;
Unit2.DataModule2.pokupatel_ADOQuery.Active:=False;
Unit2.DataModule2.pokupatel_ADOQuery.Active:=True;
end;
После запуска и использование данного, вылизает такая ошибка:

Код
Project Project1.exe raised exception class EOelException with message 'Процедура или функция "del_pokupatel" ожидает параметр "@id", который не был предоставлен'. Prosecc stopped. Use step or Run to continue.
Помогите, что нужно делать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2012, 16:54
Ответы с готовыми решениями:

При удалении строки из базы и datatable возникает ошибка "ArgumentOutOfRangeException"
Есть база данных dbf, из нее заполняется datatable1, из datatable1 вручную заполняется datatable2,...

При удалении столбца возникает ошибка "Для обновления требуется действительный DeleteCommand"
приложение отсоединено работает с бд через sqldataAdapter и DataSet. есть две кнопки обновить и...

При создании нового файла "*.mdb" возникает "ошибка связи с сервером OLE"
При создании нового файла "*.mdb" "ошибка связи с сервером OLE". Выскакивают окна Окно 1...

Возникает ошибка "0xC0000005: Нарушение прав доступа при чтении "0xfeeefee2"."
Подскажите, пожалуйста, в чем может быть ошибка и как его исправить? В деструкторе указывает на...

10
Модератор
4204 / 3044 / 581
Регистрация: 21.01.2011
Сообщений: 13,180
09.10.2012, 17:01 2
Так ты объявил в процедуре параметр, а перед вызовом его не подставил. О чем тебе по-русски и сообщили
0
1301 / 707 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
09.10.2012, 17:02 3
exec del_pokupatel(1);
0
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 35
09.10.2012, 17:08  [ТС] 4
То есть вот так?

Delphi
1
2
3
4
5
6
7
8
9
 with Unit2.DataModule2.help_ADOQuery do
begin
Close;
SQL.Clear;
SQL.Add('exec del_pokupatel(2)');
ExecSQL;
Unit2.DataModule2.pokupatel_ADOQuery.Active:=False;
Unit2.DataModule2.pokupatel_ADOQuery.Active:=True;
end;
сделал так, попробывал пишет:

Неправильный синтаксис около конструкции "2"
0
1301 / 707 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
09.10.2012, 17:16 5
читайте мануал по созданию функций в MS SQL

думаю оно ждет параметр который является "переменной" а не константой.

Ваще данная функция смысла не имеет ибо проще одним запросом все записать

PS запрос не верный, нужно такой :

DELETE FROM pokupatel WHERE id = @id

PSPS не силен в MS SQL
0
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 35
09.10.2012, 17:30  [ТС] 6
Исправил:

Delphi
1
2
3
4
5
create procedure del_pokupatel(@id int)
as
begin
DELETE FROM pokupatel WHERE id = @id
end
Delphi
1
2
3
4
5
6
7
8
9
 with Unit2.DataModule2.help_ADOQuery do
begin
Close;
SQL.Clear;
SQL.Add('exec del_pokupatel 2');
ExecSQL;
Unit2.DataModule2.pokupatel_ADOQuery.Active:=False;
Unit2.DataModule2.pokupatel_ADOQuery.Active:=True;
end;

Пишет: Конфликт инструкции DELETE с ограничением REFERENCE "FK_dogovor_pokupatel". Конфликт произошел в базе данных "Test", таблица "dbo.dogovor", column "id_pokupatel"
0
1301 / 707 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
09.10.2012, 19:48 7
hottabych1607, короче учи синтаксис SQL языка
0
Эксперт Pascal/Delphi
1134 / 615 / 129
Регистрация: 13.02.2009
Сообщений: 3,531
10.10.2012, 04:00 8
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
try
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('DELETE FROM [Имя Таблици]');
ADOQuery1.SQL.Add('WHERE ID = 1');
ADOQuery1.ExecSQL;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM [Имя Таблици]');
ADOQuery1.Active:=True;
except
end;
0
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 35
10.10.2012, 09:39  [ТС] 9
Короче сделал так

Delphi
1
2
3
4
5
6
7
    with Unit2.DataModule2.pokupatel_ADOQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Add('delete from pokupatel where pokupatel.id=1');
    Open;
  end;
Пишет ошибку:

Код
Конфликт инструкции DELETE с ограничением PERFENCE "FK_dogovor_Pokupatel". Конфликт произошел в базе данных "Test". Таблица "dbo.dogovor", column "id_pokupatel"
0
Модератор
4204 / 3044 / 581
Регистрация: 21.01.2011
Сообщений: 13,180
10.10.2012, 09:54 10
Это значит, что ты пытаешься удалить строку родительской таблицы при том, что на нее есть ссылки из дочерней таблицы (а FK создан без опции DELETE CASCADE).

PS
только не "PERFENCE", а REFERENCE
0
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 35
10.10.2012, 13:14  [ТС] 11
Так...а как это исправить? то есть чтобы удалял всю строчку по заданомму ID
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.10.2012, 13:14
Помогаю со студенческими работами здесь

Ошибка Ошибка при вызове метода контекста (Выполнить) Ожидается выражение "ВЫБРАТЬ"
Выдает ошибку. Была пропущена точка. Исправила. Выдавал другую ошибку теперь опять эту. ...

Ошибка при вызове метода контекста (Выполнить) по причине: Ожидается выражение "("
Что делать с этой ошибкой? Ошибка при вызове метода контекста (Выполнить)...

Сериализация. Ошибка Тип "..." с именем контракта данных "..." не ожидается
Есть класс сериализации с реализованными методами сериализации/десериализации. public class...

Возникает ошибка "You have an error in your SQL syntax"
Возникает ошибка <?php include ("db.php"); session_start(); if (!empty($_SESSION) and...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru