Есть процедура
CREATE PROCEDURE [admin_ch].[proc_user_update]
@user_id INT=-1,
...
AS
BEGIN
...
SELECT @user_id AS [user_id],@result_text AS [result], @error AS [error];
END
которая по мимо определённых манипуляций, возвращает некоторые данные... её создатель dbo
есть пользователь, которому даны права на вызов этой процедуры
GRANT EXECUTE
ON [admin_ch].[proc_user_update]
TO [tuser]
GO
есть код в делфи, который вызывает эту процедуру
// загружаем данные пользователя
sp := TADOStoredProc.Create(nil);
try
sp.Connection := Self.conn;
sp.ProcedureName := 'admin_ch.proc_user_update';
sp.Parameters.CreateParameter( 'user_id' ,ftInteger,pdInput, 10,user_id );
...
//sp.ExecProc;
sp.Open;
if sp.FieldByName('error').AsInteger = 1 then
ShowMessage(sp.FieldByName('result').AsString);
sp.Close;
finally
sp.Free();
end;
end;
если я вызываю процедуру через sp.ExecProc; то она нормально срабатывает, без всяких вопросов, но в этом случае, ничего нет в sp.FieldByName('error'), то есть, как я понял, не возвращается результат...
решил попробовать через sp.Open; - sp.Close; стала вылазить ошибка (на операторе sp.Open) - "У пользователя нет разрешений на выполнение данного действия"
аналгично при использовании ADODataSet.CommandText = 'EXEC admin_ch.proc_user_update :user_id...'
в данном примере можно конечно решить проблему через out параметры, но надо писать ещё и другие процедуры, которые возвращают наборы данных (таблички)... хочется разобраться в чём трабла..
вопрос: какое разрешение должно быть у пользователя на процедуру чтобы получить результат? или что я делаю не правильно при вызове процедуры из приложения?