[delphi] ADOStoredProce i retun value

0

Witam.
Mam taka procedure sql:

create proc dbo.SprawdzStatusZadania(@IdZadania int)
as begin
declare @IdStatusu int

select @IdStatusu=z.IdStatusu 
	from Zadania z
		inner join Statusy s on z.IdStatusu=s.IdStatusu
where IdZadania=@IdZadania
return @IdStatusu

end

oraz taki kod w delphi zeby ja wykonac

with dmADO.spProcedury do
begin
ProcedureName := 'dbo.SprawdzStatusZadania';
Parameters.Refresh;
Parameters.ParamByName('@IdZadania').Value := cb3.text;
Edit1.text := IntToStr(Parameters.ParamByName('@IdStatusu').Value);
Prepared := true;
ExecProc;
end;

chcialbym otrzymac na program "return @IdStatusu". Niestety użycie linijki z Edit1.Text nie działa. Grzebałem po googlach ponad godzine i znalazłem, że można to zrobić przy użyciu:
dmADO.spProcedury.Parameters.CreateParameter('@IdStatusu',ftInteger ,pdReturnValue ,4)
jakoś tak, ale co bym nie wpisał w parametry to jest niedobrze.
IdZadania podaję z comboboxa "cb3".
Może ktoś wie jak podać mi tą wartość z procedury na program?
pozdrawiam

0

jaką wartość ma Ci zwrócić procedura, która się nie wykonała??? Nie wpadłeś na to aby tą procedurę najpierw wykonać (ExecProc) a dopiero potem odczytać rezultat?

0

no rzeczywiście teraz wyświetla mi wartość jak mam tak:

with dmADO.spProcedury do
begin
ProcedureName := 'dbo.SprawdzStatusZadania';
Parameters.Refresh;
Parameters.ParamByName('@IdZadania').Value := cb3.text;
Prepared := true;
ExecProc;
parameters.CreateParameter('@IdStatusu',ftString,pdReturnValue,1,ftInteger);
edtIdStatOld.text := IntToStr(Parameters.ParamByName('@IdStatusu').Value);
end;

ale nadal nie działa jak powinno, i chyba wiem o którą linijkę chodzi, otóż jeżeli napiszę:
parameters.CreateParameter('@IdStatusu',ftString,pdReturnValue,1,ftInteger);
To niezależnie od podanego inputa wyswietla mi output '1' (chociaz powinny byc różne)
a jeżeli mam tak:
parameters.CreateParameter('@IdStatusu',ftInteger,pdReturnValue,1,ftInteger);
to niezależnie od podanego inputa wyswietla mi output '3' (chociaz powinny byc różne),
sprawa nie tkwi w pdReturnValue bo z pdOutput wyswietla tak samo,
wiesz może w czym jest pies pogrzebany?

0

ale po jakiego próbujesz na siłę stworzyć nowy parametr - wykonaj procedurę i odczytaj wynik - KONIEC

0

zacząłem z parametrem, bo po skasowaniu tej linijki:

//parameters.CreateParameter('@IdStatusu',ftString,pdReturnValue,1,ftInteger);

i odpaleniu programu, wyswietla mi:
" spProcedury: Parameter '@IdStatusu' not found "
właśnie dlatego tak zrobiłem

0

nie zwróciłem uwagi na samą stored proc - a gdzie ona tam zwraca jakąś wartość?
Zobacz sobie tu http://www.cleardata.biz/articles/storedproc.aspx jak zwrócić jakąś wartość z procedury

0

OK. stronka się przydała, bo przynajmniej w SQL expresie wyswietla mi prawidlowa wartosc. użyłem sposobu trzeciego Using Return bo potrzebuje pojedynczej jednoznakowej informacji na feedback.
jak wrzuce ten kod:

alter proc dbo.ZwrocStatusZadania(@IdZadania int)
as begin
declare @IdStatusu int
select @IdStatusu=z.IdStatusu
from Zadania z
inner join Statusy s on z.IdStatusu=s.IdStatusu
where IdZadania=@IdZadania
return @IdStatusu
end
go
Declare @ReturnValue int
EXEC @ReturnValue = dbo.ZwrocStatusZadania 1
Select ReturnValue=@ReturnValue

to mi działa, ale nijak nie mam pojęcia jak to przełożyć na Delphi (nigdy nie zwracałem wartości w Delphi) i grzebie po internecie i sie mecze i nic. Help please

0

no to zły sposób wybrałeś - w tym wypadku musisz użyć pierwszego - Using OUTPUT variables

0

Many thanks:) teraz działa jak trzeba

1 użytkowników online, w tym zalogowanych: 0, gości: 1