Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2015, 17:54   #1
Maxjuvefan
Пользователь
 
Регистрация: 24.08.2015
Сообщений: 46
По умолчанию Передача параметров в хранимой процедуре

Есть хранимая процедура Poisk с входным @nom и выходным @pr int output параметрами. Код в дельфи:
Код:
 ADOStoredPoisk.Parameters.ParamValues['@nom'] := Edit1.Text;
ADOStoredPoisk.Parameters.ParamValues['@pr'] := 3;
ADOStoredPoisk.Prepared:=true;
ADOStoredPoisk.ExecProc;
Как получить значение выходного параметра @pr в переменную (значение меняется в хранимой процедуре Poisk)?

Последний раз редактировалось Stilet; 16.09.2015 в 18:32.
Maxjuvefan вне форума Ответить с цитированием
Старый 16.09.2015, 18:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
If a stored procedure returns output parameters, they are stored in the Parameters property when ExecProc returns control to the application.
Т.е.
Код:
...
ADOStoredPoisk.ExecProc;
...:=ADOStoredPoisk.Parameters.ParamValues['@pr']; // Возвращаем значение.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.09.2015, 19:36   #3
Maxjuvefan
Пользователь
 
Регистрация: 24.08.2015
Сообщений: 46
По умолчанию

Добавил в код эту строку:
Код:
ADOStoredPoisk.Parameters.ParamValues['@nom'] := Edit1.Text;
ADOStoredPoisk.Parameters.ParamValues['@pr'] := 3;
ADOStoredPoisk.Prepared:=True;
ADOStoredPoisk.ExecProc;
// ADOStoredPoisk.Parameters.Refresh;
pr1:= ADOStoredPoisk.Parameters.ParamValues['@pr'];
Showmessage(IntToStr(pr1));
Выводится "3" (начальное переданное значение), хотя в хранимой процедуре явно задаю set @pr=7. Если раскомментировать строку обновления параметров, то выводится "0", хотя 0 нигде не присваивается. Не понимаю, что не так?

Последний раз редактировалось Stilet; 16.09.2015 в 19:40.
Maxjuvefan вне форума Ответить с цитированием
Старый 16.09.2015, 19:54   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

А как ХП сама выглядит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.09.2015, 22:01   #5
Maxjuvefan
Пользователь
 
Регистрация: 24.08.2015
Сообщений: 46
По умолчанию

Хранимая процедура:
Код:
ALTER PROCEDURE [dbo].[Poisk] (@nom nvarchar(10),@pr int output)
AS
DECLARE @i int
DECLARE @id int
DECLARE @nomer nvarchar(10)
BEGIN
INSERT INTO Poisk_po_nomeru (id, nomer) SELECT * FROM NomerTel WHERE Номер LIKE ('%' + @nom + '%')
DECLARE my_cur CURSOR FOR 
SELECT id, nomer FROM  Poisk_po_nomeru
--открываем курсор
OPEN my_cur
--считываем данные первой строки в наши переменные
FETCH NEXT FROM my_cur INTO @id, @nomer
--если данные в курсоре есть, то заходим в цикл
--и крутимся там до тех пор, пока не закончатся строки в курсоре
set @i=0
WHILE @@FETCH_STATUS = 0
BEGIN
IF EXISTS (SELECT "Дата и Время",Длительность FROM DannyeTel WHERE (idНомер = @id))
BEGIN
INSERT INTO ##Rezultat_poiska_po_nomeru (idNom, "Дата и время", Длительность) SELECT idНомер,"Дата и Время",Длительность FROM DannyeTel WHERE (idНомер = @id)
IF (SELECT COUNT(*) FROM ##Rezultat_poiska_po_nomeru)>@i
BEGIN
UPDATE ##Rezultat_poiska_po_nomeru SET Номер = @nomer WHERE idNom = @id
set @i= @i+1
END
END
FETCH NEXT FROM my_cur INTO @id, @nomer
END
CLOSE my_cur
deallocate my_cur
set @pr=7
END
Таблица с результатом поиска создается. Хотелось передавать параметром количество найденных записей. Поскольку с передачей параметров проблема, просто присваиваю @pr значение, отличное от первоначального.

Последний раз редактировалось Stilet; 17.09.2015 в 09:09.
Maxjuvefan вне форума Ответить с цитированием
Старый 17.09.2015, 09:15   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну вроде все правильно, но наверное @ нужно не писать в коде Делфи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2015, 12:06   #7
Maxjuvefan
Пользователь
 
Регистрация: 24.08.2015
Сообщений: 46
По умолчанию

А параметр всё равно не передается. Без @ выдает ошибку parameter 'pr' not found

Последний раз редактировалось Maxjuvefan; 17.09.2015 в 12:50.
Maxjuvefan вне форума Ответить с цитированием
Старый 17.09.2015, 14:09   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Как коллекция параметров создана? Какие свойства у параметров, особенно у того out? Должно все работать и работает, если корректно параметры описаны в коллекции
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler(TASM) - передача параметров процедуре через стек idontknowassembler Помощь студентам 0 07.06.2015 20:35
Как зделать запрос в хранимой процедуре xatabich БД в Delphi 8 08.12.2014 08:08
Имена переменных в хранимой процедуре Muramidaza БД в Delphi 0 17.03.2014 22:44
Insert or Update в хранимой процедуре Dozent SQL, базы данных 4 15.10.2013 03:17
[Delphi] Передача параметров процедуре Язь Помощь студентам 0 09.12.2011 17:38