Array
(
)

Proc. Nao funciona com ADO só com BDE

Tremonti
   - 21 set 2005

Galera, tenho a Procedure Abaixo no SQL Server:

Create proc sp_ProxNumero3(@Campo varchar(20), @ProxNumero varchar(20) OUTPUT) AS --10:14
DECLARE @AnoStr char(4)
DECLARE @Num varchar(20)
DECLARE @n int
DECLARE @UltValor float
DECLARE @Ano smallint
DECLARE @TamCampo tinyint
DECLARE @UsaAno char(1)
DECLARE @ResultStr varchar(20)
DECLARE @AnoAtual smallint
SELECT @AnoAtual = DATEPART(year, GETDATE())
SELECT @Ano = Ano, @UsaAno = UsaAno FROM NrContr WHERE CdCampo = @Campo
IF @UsaAno = ´S´ AND @AnoAtual <> @Ano
Begin
BEGIN TRAN
UPDATE NrContr SET Ano = @AnoAtual, UltValor = 0 WHERE CdCampo = @Campo
COMMIT
End

DECLARE cursor_prox CURSOR FOR SELECT UltValor, Ano, TamCampo, UsaAno FROM NrContr
WHERE CdCampo = @Campo

OPEN cursor_prox

FETCH NEXT FROM cursor_prox INTO @UltValor, @Ano, @TamCampo, @UsaAno

UPDATE NrContr SET UltValor = @UltValor + 1
WHERE CURRENT OF cursor_prox

CLOSE cursor_prox
DEALLOCATE cursor_prox

SELECT @AnoStr = STR(@Ano,4)
SELECT @Num = STR(@UltValor+1, @TamCampo)

SELECT @n = 1
while @n <= @TamCampo
begin
if substring(@Num, @n, 1) = ´ ´
SELECT @ResultStr = @ResultStr + ´0´
else
SELECT @ResultStr = @ResultStr + Substring(@Num, @n, 1)
SELECT @n = @n + 1
end
SELECT @Num = @ResultStr
if @UsaAno = ´S´
SELECT @ProxNumero = @AnoStr + @Num
else
SELECT @ProxNumero = @Num

Quando uso os componentes da paleta BDE, me retorna um valor, certinho

Quando uso ADO não...

Alguem pode me explicar?

abraços e aguardo respostas

Movido de Delphi para SQL Server

Rjun
   - 21 set 2005

Como que você esta fazendo? Que componentes você esta utilizando?

Tremonti
   - 22 set 2005

Utilizo o ADOConnection para a conexão e o adostoredproc para a procedure...

e passo os parametros...

Funciona com o BDE perfeitamente, e do mesmo jeitinho que uso no ADO

E agora?

Rjun
   - 22 set 2005

Eu uso direto esses componentes sem problemas. O que está acontecendo? Que valor você não esta conseguindo retornar? Você pode postar o trecho de código onde vc passa os parâmetros, executa a stp e retorna o valor?

Tremonti
   - 23 set 2005

Cara, vamos fazer melhor entao...

Me fala como deveria ser...Pois estou passando Normal

Abraços...

Rjun
   - 23 set 2005

Assim fica meio complicado...mas vamos tentar...vou considerar que seu componente TADOStoredProcedure esteja configurado corretamente.

#Código

stpProximoNumero.Parameters.ParamByName(´@Campo´).Value := ´campo´;
stpProximoNumero.ExecSql;
ProxNum := stpProximoNumero.Parameters.ParamByName(´@ProxNumero´).Value;


Tremonti
   - 29 set 2005

Nao funcionou

:(

Rjun
   - 29 set 2005

Você pode postar o código utilizando os componentes do BDE?

Tremonti
   - 29 set 2005

stpProximoNumero.ParamByName(´@Campo´).Value := ´campo´;
stpProximoNumero.ExecSql;
ProxNum := stpProximoNumero.ParamByName(´@ProxNumero´).Value;

Só isso

A mesma coisa do ado

Tremonti
   - 30 set 2005

COM BDE

function ProxNumero(prNmCampo: String): String;
begin
with dtmConfig.stpProxNumero do begin
ParamByName(´@Campo´).AsString := prNmCampo;
try
ExecProc;
except
ProxNumero := ProxNumero(prNmCampo);
Exit;
end;
ProxNumero := ParamByName(´@ProxNumero´).AsString;
end;
end;

Na hora de Usar

Valor := ProxNumero(´NrHistCOmpra´);

Abraços