Proc. Nao funciona com ADO só com BDE
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
[color=green:9c3c25bdae]Movido de Delphi para SQL Server[/color:9c3c25bdae]
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
[color=green:9c3c25bdae]Movido de Delphi para SQL Server[/color:9c3c25bdae]
Tremonti
Curtidas 0
Respostas
Rjun
21/09/2005
Como que você esta fazendo? Que componentes você esta utilizando?
GOSTEI 0
Tremonti
21/09/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?
e passo os parametros...
Funciona com o BDE perfeitamente, e do mesmo jeitinho que uso no ADO
E agora?
GOSTEI 0
Rjun
21/09/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?
GOSTEI 0
Tremonti
21/09/2005
Cara, vamos fazer melhor entao...
Me fala como deveria ser...Pois estou passando Normal
Abraços...
Me fala como deveria ser...Pois estou passando Normal
Abraços...
GOSTEI 0
Rjun
21/09/2005
Assim fica meio complicado...mas vamos tentar...vou considerar que seu componente TADOStoredProcedure esteja configurado corretamente.
stpProximoNumero.Parameters.ParamByName(´@Campo´).Value := ´campo´; stpProximoNumero.ExecSql; ProxNum := stpProximoNumero.Parameters.ParamByName(´@ProxNumero´).Value;
GOSTEI 0
Tremonti
21/09/2005
Nao funcionou
:(
:(
GOSTEI 0
Rjun
21/09/2005
Você pode postar o código utilizando os componentes do BDE?
GOSTEI 0
Tremonti
21/09/2005
stpProximoNumero.ParamByName(´@Campo´).Value := ´campo´;
stpProximoNumero.ExecSql;
ProxNum := stpProximoNumero.ParamByName(´@ProxNumero´).Value;
Só isso
A mesma coisa do ado
stpProximoNumero.ExecSql;
ProxNum := stpProximoNumero.ParamByName(´@ProxNumero´).Value;
Só isso
A mesma coisa do ado
GOSTEI 0
Tremonti
21/09/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
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
GOSTEI 0