Неправильный результат хранимой процедуры

Natashadanse999
Дата: 01.06.2011 12:40:54
параметр объявлен так: @id int output
я делаю select, в результате получаю id_groups.например, id_groups=11.
если выполнить запрос в квери=ответ правильный.
когда вызаваю процедуру в делфи-всегда выдает id_groups=12.
в чем проблема?

ADOStoredProc1.ProcedureName:='id_groups_select;1';
ADOStoredProc1.Parameters.Refresh;
ADOStoredProc1.Parameters.ParamByName('@Login').Value:=Edit_login.Text;
ADOStoredProc1.Parameters.ParamByName('@parol').Value:=Edit_parol.Text;
ADOStoredProc1.Parameters.ParamByName('@id').Value:=0;
ADOStoredProc1.ExecProc;
Form1.Edit1.Text:=IntToStr(ADOStoredProc1.Parameters.ParamByName('@id').Value);
demian111
Дата: 01.06.2011 12:47:14
Natashadanse999,

ADOStoredProc1.Parameters.ParamByName('@id').Direction:=pdInputOutput;
Natashadanse999
Дата: 01.06.2011 12:51:19
demian111,

так тоже дает неправильный ответ
эспумизан
Дата: 01.06.2011 12:55:39
Natashadanse999,

а текст хранимой процедуры слабо выложить?
Natashadanse999
Дата: 01.06.2011 12:57:59
эспумизан,
да нет, не слабо.

CREATE PROCEDURE id_groups_select @Login VarChar(50), @Parol VarChar(50), @id int output
AS
BEGIN
select sp_groups.id_groups
as id_groups
from (sp_groups
inner join sp_users_groups on sp_users_groups.id_groups=sp_groups.id_groups
inner join sp_users on sp_users_groups.id_users=sp_users.id_users)
where sp_users.id_users=(select id_users from sp_users WHERE (sp_users.login=@login) AND (sp_users.parol=@parol))
select @id=sp_groups.id_groups from sp_groups
end
GO
Гавриленко Сергей Алексеевич
Дата: 01.06.2011 13:07:44
Ваша процедура возвращает рекордсет. Не знаю, как сейчас, но раньше output-параметры можно было получить только после рекордсета, т.е. надо что-то типа следующего кода:

ADOStoredProc1.Open;
ADOStoredProc1.Close;
Form1.Edit1.Text:=IntToStr(ADOStoredProc1.Parameters.ParamByName('@id').Value); 
эспумизан
Дата: 01.06.2011 13:11:07
Natashadanse999,

select sp_groups.id_groups
as id_groups from (sp_groups
inner join sp_users_groups on sp_users_groups.id_groups=sp_groups.id_groups
inner join sp_users on sp_users_groups.id_users=sp_users.id_users)
where sp_users.id_users=(select id_users from sp_users WHERE (sp_users.login=@login) AND (sp_users.parol=@parol)) 


select @id=sp_groups.id_groups from sp_groups

в первой части сделали выборку непонятно куда и непонятно зачем

во второй части непонятно что загнали в переменную

что вы хотите от бедной среды?
Natashadanse999
Дата: 01.06.2011 13:12:42
Гавриленко Сергей Алексеевич,

не выходит
эспумизан
Дата: 01.06.2011 13:13:23
select top 1 @id=sp_groups.id_groups as id_groups 
from (sp_groups inner join sp_users_groups on sp_users_groups.id_groups=sp_groups.id_groups
inner join sp_users on sp_users_groups.id_users=sp_users.id_users)
where sp_users.id_users=(select id_users from sp_users WHERE (sp_users.login=@login) AND (sp_users.parol=@parol)) 


чую что надо как то так, но сам запрос ужасает
Natashadanse999
Дата: 01.06.2011 13:13:51
эспумизан,

а почему тогда query analyzer дает правильный ответ?